72. Edit Distance
最小编辑距离,从原来的字符串至少要经过多少次操作才能够变成目标字符串,操作包括删除一个字符、插入一个字符、更新一个字符
思路:动态规划,用dp[i][j]表示word1[:i]到word2[:j]的最小编辑距离,显然 dp[0][j] = j, dp[i][0] = i,
dp[i][j]有三种情况:
- 如果word1[i] == word2[j], 则等于dp[i-1][j-1], 否则等于dp[i-1][j-1] + 1, 即增加一个替换
- 等于dp[i-1][j] + 1, 即word1[:i-1]转化为word2[:j]的基础上删除word1[i]就行了
- 等于dp[i][j-1] + 1, 即word1[:i]转化为word[:j-1]的基础上再添加一个word2[j]就可以了
所以,状态转移方程是:dp[i][j] = dp[i-1][j-1] if word1[i-1] == word2[j-1] else min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1
1 | class Solution: |