题目
求两个词的编辑距离,可以进行 插入,删除,替换三种操作。
思路
动态规划
状态定义:
dp[i][j]表示从word1[0:i-1]变换到word2[0:j-1]的最小编辑距离
状态初始化:第一行和第一列都好解释,因为两个字符串都可以删除至空值“”,然后相等
状态转移:
注意,更新dp[i][j]时,判断的是word1[i-1] 和 word2[j-1]
代码
class Solution:
def minDistance(self, word1: str, word2: str) -> int:
n = len(word1)
m = len(word2)
dp = [[0 for _ in range(m+1)] for _ in range(n+1)]
for i in range(n+1):
dp[i][0] = i
for j in range(m+1):
dp[0][j] = j
for i in range(1,n+1):
for j in range(1,m+1):
if word1[i-1] == word2[j-1]:
dp[i][j] = dp[i-1][j-1]
else:
dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1
return dp[n][m]