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()];
}

猜你喜欢

转载自blog.csdn.net/u013263891/article/details/84922061
今日推荐