LeetCode编辑距离
解题说明
本题是一道非常典型的动态规划题
只有三种操作,代码里面都有描述,非常清晰
- 插入一个字符
- 删除一个字符
- 替换一个字符
python代码
class Solution(object): def minDistance(self, word1, word2): """ :type word1: str :type word2: str :rtype: int """ #典型的动态规划 dp = [ [-1 for i in range(len(word2) + 1)] for i in range(len(word1) + 1)] dp[0][0] = 0 for i in range(len(dp)): for j in range(len(dp[0])): #插入操作 if j > 0: if dp[i][j] == -1: dp[i][j] = dp[i][j-1] + 1 else: dp[i][j] = min(dp[i][j], dp[i][j-1]+1) #删除操作 if i > 0: if dp[i][j] == -1: dp[i][j] = dp[i-1][j] + 1 else: dp[i][j] = min(dp[i][j], dp[i-1][j]+1) #修改操作,有点特殊,可能不需要修改 if i > 0 and j > 0: if dp[i][j] == -1: if word1[i-1] == word2[j-1]: dp[i][j] = dp[i-1][j-1] else: dp[i][j] = dp[i-1][j-1] + 1 else: if word1[i-1] == word2[j-1]: dp[i][j] = min(dp[i-1][j-1], dp[i][j]) else: dp[i][j] = min(dp[i-1][j-1]+1, dp[i][j]) #print dp return dp[len(word1)][len(word2)]