1. 程式人生 > >leetcode 72:編輯距離

leetcode 72:編輯距離

使用動態規劃的方式, 建立一個二維陣列,當前位置表示所需要的前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()];
}