题目:给定两个单词word1和word2,计算将word1转换为word2所需的最小步数。
只允许以下3种操作:a)插入一个字符 ; b)删除一个字符; c)替换一个字符。
对应LeetCode原题:LeetCode-72:编辑距离
【转载】
思路 动态规划
用一个dp 数组记录需要变化的步数。dp[i]【j】表示字符串长度为i 变为字符串长度j 需要的步数
代码:
int minDistance(string word1, string word2) {
int len1=word1.length();
int len2=word2.length();
vector<vector<int>>dp(len1+1,vector<int>(len2+1));
for(int i=0;i<=len1;i++){
for(int j=0;j<=len2;j++){
if(i==0){
dp[i][j]=j; //如果 i=0 则需要插入j个字符
}else if(j==0){
dp[i][j]=i; //如果j=0则需要删除i个字符
}else if(word1[i-1]==word2[j-1]){ //如果字符相同则不做变换,等于这个字符之前的步数
dp[i][j]=dp[i-1][j-1];
}else{ //否则 就从插入,删除,修改中选择最小的 加 1
dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
}
}
}
return dp[len1][len2];
}
---------------------
作者:i_am_bird
来源:CSDN
原文:https://blog.csdn.net/i_am_bird/article/details/78326973
版权声明:本文为博主原创文章,转载请附上博文链接!