72. 编辑距离
https://leetcode-cn.com/problems/edit-distance/
解法一:dp
主要想法就是已知word1[0…i-2]转换到word2[0…j-2]的距离,在此基础上看最后一位需要何种编辑,求word1[0…i-1]转换到word2[0…j-1]的距离。
用dp[i][j]
表示word1[0...i-1]
转换到word2[0...j-1]
的距离,(为何要退一位表示?因为i或j为0表示空串)。初始:dp[0][0] = 0(空串到空串不需要操作),dp[i][0] = i(变成空串只能删除操作),dp[0][j] = j(空串只能插入操作)
主要分两种情况讨论:
若word1[i-1] == word2[j-1]
,即i-1位置不用编辑,则dp[i][j]=dp[i-1][j-1]
;
若word1[i-1] != word2[j-1]
,又分三种情况:
1.若两串退一位后相等,即word1[0...i-2] == word2[0...j-2]
,将word1[i-1]
替换为word2[j-1]
即可,多出一次操作,即dp[i][j]=dp[i-1][j-1]+1
2.若串1退一位后相等,即word1[0...i-2] == word2[0...j-1]
,将word1[i-1]
删除即可,也是一次操作:dp[i][j]=dp[i-1][j]+1
3.若串2退一位后相等,即word1[0...i-1] == word2[0...j-2]
,将word2[j-1]
插入串1末尾即可,也是一次操作:dp[i][j]=dp[i][j-1]+1
综上,当word1[i-1] != word2[j-1]
时,dp[i][j]
取上面三种情况的最小值
js:
最后更新于