leetcode 72:編輯距離
阿新 • • 發佈:2018-12-09
使用動態規劃的方式, 建立一個二維陣列,當前位置表示所需要的前word1的前i個字元與word2的前j個數組所需要的最少運算元,
當前[i,j]每次選擇三個位置的最小值,[i-1,j-1],[i-1,j],[i,j-1],對於當前位置,如果word1[i-1]和word2[j-1]相等時,是[i-1,j-1]與[i-1,j]+1 [i,j-1]+1中的最小值,不相等時是[i-1,j-1]+1 與[i-1,j]+1,[i,j-1]+1的最小值
同時需要對word1 word2分別為空時進行操作,為空時最少操作時單詞的長度
int minDistance(std::string word1, std::string word2) { std::vector<std::vector<int>> c; std::vector<int> v(word2.size()+1); for(int i=0;i<=word1.size();i++){ c.push_back(v); } c[0][0]=0; for(int i=1;i<=word1.size();i++){ c[i][0]=i; } for(int i=1;i<=word2.size();i++){ c[0][i]=i; } for(int i=1;i<=word1.size();i++){ for(int j=1;j<=word2.size();j++){ int b=std::min((c[i-1][j-1]+(word1[i-1]==word2[j-1]?0:1)),c[i-1][j]+1); c[i][j]=std::min(b,c[i][j-1]+1); } } return c[word1.size()][word2.size()]; }