dp刷题(三)编辑距离(Hard)

编辑距离_牛客题霸_牛客网

描述

给定两个单词word1和word2,请计算将word1转换为word2至少需要多少步操作。
你可以对一个单词执行以下3种操作:
a)在单词中插入一个字符
b)删除单词中的一个字符
c)替换单词中的一个字符

示例1

输入:"b",""

返回值:1

示例2

输入:"ab","bc"

返回值:2

题解:

给出俩个单词字符串通过三种操作来选择一个最小操作数完成word1转换为Word2

状态选取:F(i,j) 表示由word1中前i个字母 转换成word2中前j个字母的最下操作次数

因为俩个单词的长度不同,我们需要通过修改word1单词,可以利用背包思想,通过word1中前i个字母来表示word2中前j个字母,下图中左侧横坐标就是word1中的前i个字母,

状态转移方程:F(i,j) = min(插入、删除、替换)

                                        min(F(i,j-1)+1, F(i-1,j)+1, F(i-1,j-1) + W1[i]==W2[j] ? 0 : 1)

需要由这第i项转换为右上方的第j项

 

 

 首先初始化第一行,用空串来转换为word2对应的前j个单词,最小的操作次数仅需仅需进行插入即可

同理实现第一列,用word1前i项实现转换为空串,最小的操作次数仅需进行删除操作

 实现第二行,用字母a来转换为word2的前1项“h”

                      可以通过F(1,0) 得来的 空串“”来进行一次插入即可得到h

                       也可以通过F(0,1)得到的 ha 一次删除得到h

                       也可以通过F(0,0) 得到将 “ ” 替换为h

用word1前1项a来实现Word2前2项“he”

                        通过F(1,1)得到的 h 进行一次插入e操作得到 he

                        通过a位置插入he 然后进行删除a得到 he

                        通过F(0,1) 得到ha 替换 a得到 he

 源码:

首先初始化二维矩阵,然后通过min函数选择(插入操作、删除操作、替换或不替换)之间的最小值.

    int minDistance(string word1, string word2) {
        // write code here
        int row = word1.size();
        int col = word2.size();
        vector<vector<int>> res(row+1, vector<int> (col+1));
        for(int j = 0; j <= col; j++)
            res[0][j] = j;
        for(int i = 1; i <= row; i++)
            res[i][0] = i;
        for(int i = 1; i <= row; i++)
        {
            for(int j = 1; j <= col; j++)
            {
                // 插入删除
                res[i][j] = min(res[i-1][j], res[i][j-1])+1;
                if(word1[i-1] == word2[j-1])
                    res[i][j] = min(res[i][j], res[i-1][j-1]);
                else
                    // 只有当俩项不相同情况下才进行替换
                    res[i][j] = min(res[i][j], res[i-1][j-1]+1);
            }
        }
        return res[row][col];
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值