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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值