一.题目:
从一个字符串s变换到另一个字符串至少需要多少步,可以删除替换增加.
二.解题思路:
题中让我们求多少步,可以想到应该需要用动态规划去解题.这里的dp[i][j]表示word1[0:i]要变成word2[0:j]至少需要多少步.
代码如下:
class Solution(object):
def minDistance(self, word1, word2):
"""
:type word1: str
:type word2: str
:rtype: int
"""
m=len(word1)+1
n=len(word2)+1
#(m+1)*(n+1)二维矩阵,dp[i][j]表示word1[0:i]要变成word2[0:j]至少需要多少步
dp = [[0 for i in range(n)] for j in range(m)]
for j in range(n):
dp[0][j] = j #都需要增加操作
for i in range(m):
dp[i][0] = i #都需要删除操作
for i in range(1,m):
for j in range(1,n):
#左边dp[i-1][j]+1的物理意义是删除一个字母,中间是增加一个字母,dp[i-1][j-1]+0/1是替换一个字母
dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1, dp[i-1][j-1]+(0 if word1[i-1]==word2[j-1] else 1))
return dp[m-1][n-1]