给定两个单词word1和word2,请你计算出word1转换为word2所使用的最少操作数。
你可以对一个单词进行如下三种操作:
1.插入一个字符
2.删除一个字符
3.替换一个字符
如:
输入:word1=“horse”;
word2=“ros”;
输出:3
解释:①将’h’替换为’r’
②删除’r’
③删除’e’
题解:动态规划。
class Solution
{
public:
int minDistance(string word1,string word2)
{
int len1=word1.length();
int len2=word2.length();
int dp[len1+1][len2+1];//将word1的前i个字符转换为word2的前j个字符所使用的最小操作
for(int i=0;i<=len1;i++) dp[i][0]=i;
for(int j=0;j<=len2;j++) dp[0][j]=j;
for(int i=1;i<=len1;i++)
{
for(int j=1;j<=len2;j++)
{
if(word1[i-1]==word2[j-1]) dp[i][j]=dp[i-1][j-1];//当前字母相同
else dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;//当前字母不同
}
}
return dp[len1][len2];
}
};