题目描述:给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。
解题思路:动态规划,和最长公共子序列相似,根据当前结尾的两个字符是否相等选择不同的转移方式,代码如下:
class Solution:
def minDistance(self, word1: str, word2: str) -> int:
n1, n2 = len(word1), len(word2)
dp = [[0] * (n1+1) for _ in range(n2+1)]
for i in range(1, n1+1):
dp[0][i] = i
for i in range(1, n2+1):
dp[i][0] = i
for i in range(1, n2+1):
for j in range(1, n1+1):
if word1[j-1] == word2[i-1]:
dp[i][j] = dp[i-1][j-1]
else:
dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + 1
return dp[-1][-1]