0
点赞
收藏
分享

微信扫一扫

【LeetCode】编辑距离

总结

  • 稍微有点儿难度,回头我再总结一下与此题相关的题。


1.题目

题目​​链接​​ 虽然在LeetCode是道hard题,但是在洛谷也就是一道黄题而已。

2.分析

感觉就是 dp,对吧。
设 ​​​dp[i][j]​​ 表示字符串a前i位和字符串b前j位能够完全匹配所需的最少步数。那么当下的每步操作都有三种选择,分别是:插入,删除,替换。我们针对这种情况,进行递推选举一种最小值即可。

比较 ​​a[i] == b[j]​​​ 时,递推公式如何…
当 ​​​a[i] != b[j]​​​ 递推公式如何…
后来可以看到其实二者只有一个子公式是不同的,所以可以将这两种情况再简化一下就得到了最后的综合表达式。
最后对于特殊的边界需要再特殊处理一下即可。这个特殊边界有点儿不好处理。需要注意。

3.代码

根据上述分析,得到的代码如下:

class Solution:
def minDistance(self, word1: str, word2: str) -> int:
m,n = len(word1),len(word2)
if m == 0:
if n == 0:
return 0
else:
return n
if n == 0:
return m

dp = [[0 for i in range(n)] for j in range(m)]

# dp 查找出结果
for i in range(m):
for j in range(n):
# 针对特殊情况进行处理
if i==0 :
a = 0 if j==0 else j-i
b=j+1
else:
if j == 0: # i>0 j==0
a = i-j
else: # i>0 and j>0
a = dp[i-1][j-1]
b = dp[i-1][j]

c = i-j+1 if j == 0 else c = dp[i][j-1]

# 下面才是正式比较
if word1[i] == word2[j] :
dp[i][j] = min(a,b+1)
else:
dp[i][j] = min(a+1,c+1,b+1)
return dp[m-1][n-1]

举报

相关推荐

0 条评论