原题链接:Edit Distance
分析:这是一个编辑距离的问题,在编程之美上也有这道题,做法比较简单的可以想到递归的思路,然而会发现递归的思路复杂度太高,是指数级,转而也比较容易想到动态规划的思想优化复杂度,具体代码如下:
class Solution {
public:
int minDistance(string word1, string word2) {
/*
思路:这种题一般容易想到递归,但是递归这个时间复杂度太高了,转而之也非常容易想到使用动态规划的思想。
这里采用的是至底向上的动态规划思想,将矩阵依次求出即可得出最后的结果
Time Complexity:O(m*n)
Space Complexity:O(m*n)
*/
int sz=word1.size();
int tz=word2.size();
int edit[sz+1][tz+1];
int i,j=0;
for(j=0;j<=tz;j++)edit[0][j]=j;
for(i=0;i<=sz;i++)edit[i][0]=i;
for(i=1;i<=sz;i++){
for(j=1;j<=tz;j++){
if(word1[i-1]==word2[j-1])edit[i][j]=edit[i-1][j-1];
else edit[i][j]=min(min(edit[i-1][j]+1,edit[i][j-1]+1),edit[i-1][j-1]+1);
}
}
return edit[sz][tz];
}
};