好像与1143. 最长公共子序列有点相似
使用两层循环遍历word1和word2的每个字符,如果当前字符相同,则编辑距离与前一个字符的编辑距离相同;
如果不同,则取替换、删除、插入三种操作的最小编辑距离加1。
1 2 3 4 5 6 7 8 9 10 11
| class Solution: def minDistance(self, word1: str, word2: str) -> int: dp=[[0 for _ in range(len(word2)+1)] for _ in range(len(word1)+1)] for i in range(len(word1)+1): dp[i][0] = i for j in range(len(word2)+1): dp[0][j] = j for i in range(1, len(word1)+1): for j in range(1, len(word2)+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-1], dp[i-1][j], dp[i][j-1]) + 1 return dp[-1][-1]
|