原題鏈接: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];
}
};