https://leetcode.com/problems/edit-distance/description/
求两个单词的编辑距离
可以替换、删除和插入
思路:dp。主要想法就是已知word1[0…i-2]转换到word2[0…j-2]的距离,在此基础上求word1[0…i-1]转换到word2[0…j-1]的距离。
分几种情况讨论,word1[i-1]与word2[j-1]相等,或者不相等的情况。
具体见讨论区最高
class Solution:
def minDistance(self, word1, word2):
"""
:type word1: str
:type word2: str
:rtype: int
"""
m, n = len(word1), len(word2)
dp = [[0] * (n+1) for _ in range(m+1)]
#边界
for i in range(1, m+1):
dp[i][0] = i
for j in range(1, n+1):
dp[0][j] = j
for i in range(1, m+1):
for j in range(1, n+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] + 1, dp[i-1][j] + 1, dp[i][j-1] + 1)
return dp[m][n]