leetcode第72题:编辑距离
给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
- 插入一个字符
- 删除一个字符
- 替换一个字符
示例 1:
输入: word1 = "horse", word2 = "ros"
输出: 3
解释:
horse -> rorse (将 'h' 替换为 'r')
rorse -> rose (删除 'r')
rose -> ros (删除 'e')
示例 2:
输入: word1 = "intention", word2 = "execution"
输出: 5
解释:
intention -> inention (删除 't')
inention -> enention (将 'i' 替换为 'e')
enention -> exention (将 'n' 替换为 'x')
exention -> exection (将 'n' 替换为 'c')
exection -> execution (插入 'u'
网易面试时遇到了这题,当时没做出来,想不出来状态转移方程。
解题思路如下:
首先定义状态矩阵,dp[m][n],其中m为word1的长度+1,n为word2的长度+1,为什么+1?因为要考虑如果word1或word2为空的情况,后面可以看到。
定义dp[i][j]为word1中前i个字符组成的串,与word2中前j个字符组成的串的编辑距离。
插入操作:在word1的前i个字符后插入一个字符,使得插入的字符等于新加入的word2[j]。这里要考虑清楚,插入操作对于原word1字符来说,i是没有前进的,而对于word2来说是前进了一位然后两个字符串才相等的。所以此时是dp[i][j]=dp[i][j-1]+1。
删除操作:在word1的第i−1个字符后删除一个字符,使得删除后的字符串word[:i-1]与word2[:j]相同。这里要考虑清楚,删除操作对于原word2字符来说,j−1是没有前进的,而对于word1来说是删除了一位然后两个字符串才相等的。所以此时是dp[i][j]=dp[i-1][j]+(0 or 1)。

代码如下:
class Solution:
def minDistance(self, word1, word2):
m=len(word1)+1; n=len(word2)+1
dp = [[0 for i in range(n)] for j in range(m)]
for i in range(n):
dp[0][i]=i
for i in range(m):
dp[i][0]=i
for i in range(1,m):
for j in range(1,n):
if word1[i-1] == word2[j-1]:
dp[i][j] = dp[i-1][j-1]
else:
dp[i][j] = min(dp[i][j-1], dp[i-1][j], dp[i-1][j-1]) + 1
return dp[m-1][n-1]
word1 = "intention"
word2 = "execution"
test = Solution()
print(test.minDistance(word1, word2))
答案来源:https://blog.csdn.net/iyuanshuo/article/details/80112211
def minDistance(self, S1, S2):
m = len(S1) + 1;
n = len(S2) + 1
dp = [[0 for i in range(n)] for j in range(m)]
for i in range(n):
dp[0][i] = i
for i in range(m):
dp[i][0] = i
for i in range(1, m):
for j in range(1, n):
if S1[i - 1] == S2[j - 1]:
dp[i][j] = dp[i - 1][j - 1]
else:
dp[i][j] = min(dp[i][j - 1], dp[i - 1][j], dp[i - 1][j - 1]) + 1
return dp[m - 1][n - 1]
leetcode第72题:编辑距离的更多相关文章
- Leetcode OJ 刷题
Valid Palindrome吐槽一下Leetcode上各种不定义标准的输入输出(只是面试时起码能够问一下输入输出格式...),此篇文章不是详细的题解,是自己刷LeetCode的一个笔记吧,尽管没有 ...
- [LeetCode] 系统刷题5_Dynamic Programming
Dynamic Programming 实际上是[LeetCode] 系统刷题4_Binary Tree & Divide and Conquer的基础上,加上记忆化的过程.就是说,如果这个题 ...
- leetcode 第188题,我的解法,Best Time to Buy and Sell Stock IV
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...
- leetcode第37题--Count and Say
题目:(据说是facebook的面试题哦) The count-and-say sequence is the sequence of integers beginning as follows:1, ...
- LeetCode第[18]题(Java):4Sum 标签:Array
题目难度:Medium 题目: Given an array S of n integers, are there elements a, b, c, and d in S such that a + ...
- LeetCode第[1]题(Java):Two Sum 标签:Array
题目: Given an array of integers, return indices of the two numbers such that they add up to a specifi ...
- LeetCode的刷题利器(伪装到老板都无法diss你没有工作)
在工程效率大行其道的今天,如果不会写点代码以后也不容易在测试圈混下去.今天给大家推荐一个LeetCode的刷题利器,可以伪装到连你老板在这里走过去都无法确认你是在干活呢,还是在干活呢. LeetCod ...
- LeetCode每天一题之两数之和
这个LeetCode刷题系列的博客权当是为自己记一下笔记吧.博客系列会从LeetCode的第一题开始刷,同时会从零开始学习[因为我就是零/(ㄒoㄒ)/~~].同时,如果有写错的地方,希望大佬们在评论区 ...
- leetcode第三题
leetcode第三题: 题目: 给定一个字符串,找出不含有重复字符的最长子串的长度. 源码(使用java语言): class Solution { public int lengthOfLonges ...
随机推荐
- 微信小程序select不能使用,如何实现同样的效果
如果想实现同样的效果,只能使用小程序组件picker,其中,可以有一列,或者多列 点击链接查看详情: https://mp.weixin.qq.com/debug/wxadoc/dev/compone ...
- vuex之单向数据流
单向数据流 State State 用来存状态.在根实例中注册了store 后,用 this.$store.state 来访问. Getters Getters 从 state 上派生出来的状态.可以 ...
- 完整的Django入门指南学习笔记4
前言 这一章节将会全面介绍 Django 的身份认证系统,我们将实现注册.登录.注销.密码重置和密码修改的整套流程. 同时你还会了解到如何保护某些试图以防未授权的用户访问,以及如何访问已登录用户的个人 ...
- Non-UTF-8 code starting with '\xbb' in file
一.错误问题 错误问题:Non-UTF-8 code starting with '\xbb' in file,如图所示: 二.分析问题 原因:程序文件夹中出现中文,运行的时候出现如下错误,导致出错的 ...
- tmp目录自动清除和tmpwatch命令
习惯性的将一些临时文件放在tmp目录下,让其自然删除.同时,为了保证tmp目录不爆满,系统默认情况下每日会处理一次tmp目录文件,原理就是使用了tmpwatch.在系统最小安装情况下,这个功能是没有安 ...
- hdu5608杜教筛
题意:给定函数\(f(x)\),有\(n^2-3*n+2=\sum_{d|n}f(d)\),求\(\sum_{i=1}^nf(i)\) 题解:很显然的杜教筛,假设\(g(n)=n^2-3*n+2\), ...
- SpringBoot配置多数据源时遇到的问题
SpringBoot配置多数据源 参考代码:Spring Boot 1.5.8.RELEASE同时配置Oracle和MySQL 原作者用的是1.5.8版本的SpringBoot,在升级到2.0.*之后 ...
- 【LeetCode】Valid Parentheses合法括号
给定一个仅包含 '('.')'.'{'.'}'.'['.']'的字符串,确定输入的字符串是否合法. e.g. "()"."()[]{}"."[()]( ...
- [Codeforces Round #340 (Div. 2)]
[Codeforces Round #340 (Div. 2)] vp了一场cf..(打不了深夜的场啊!!) A.Elephant 水题,直接贪心,能用5步走5步. B.Chocolate 乘法原理计 ...
- 使用深度学习检测TOR流量——本质上是在利用报文的时序信息、传输速率建模
from:https://www.jiqizhixin.com/articles/2018-08-11-11 可以通过分析流量包来检测TOR流量.这项分析可以在TOR 节点上进行,也可以在客户端和入口 ...