• 72. 编辑距离


    1. 背

    哇塞我竟然还记得左神的递归转dp。
    先用DP考虑这么多种情况,可以总结为几种情况,如果word1.back()==word2.back()就可以递归变成minDistance(word1.substr(0, word1.length()-1), word2.substr(0, word2.length()-1)) ;,就是同时删掉最后一个元素。如果不相等,就要开始讨论,操作方法有三种,添加、删除和替换。
    添加:
    word1添加一个字符,可以理解为删掉word2的最后一个字符,为啥?因为当word1结尾添加一个字符后,这个字符一定是和word2结尾的字符是相等(这样效率最高),两个是相等的,就可转为删掉word2结尾的字符。
    删除:
    这就是直接删掉word1结尾的字符
    修改:
    word1结尾的字符被改成和word2结尾相同的字符,也相当于和结尾字符相等是的情况。

    这是递归,递归转换为dp,两个参数如果是int就是直接的二维矩阵,但是是string就没法直接搞成矩阵,横纵坐标就是word1和word2的长度。偶不,矩阵长度会比字符串长度大1。

    2. 题目

    给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。

    你可以对一个单词进行如下三种操作:

    插入一个字符
    删除一个字符
    替换一个字符

    示例 1:

    输入:word1 = “horse”, word2 = “ros”
    输出:3
    解释:
    horse -> rorse (将 ‘h’ 替换为 ‘r’)
    rorse -> rose (删除 ‘r’)
    rose -> ros (删除 ‘e’)
    示例 2:

    输入:word1 = “intention”, word2 = “execution”
    输出:5
    解释:
    intention -> inention (删除 ‘t’)
    inention -> enention (将 ‘i’ 替换为 ‘e’)
    enention -> exention (将 ‘n’ 替换为 ‘x’)
    exention -> exection (将 ‘n’ 替换为 ‘c’)
    exection -> execution (插入 ‘u’)

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/edit-distance
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    3. 答案

    class Solution {
    public:
        int minDistance(string word1, string word2) {
            int m = static_cast(word1.length()), n = static_cast(word2.length());
            vector> dp (1+m,vector(1+n,0));
            for(int i=0;i<=m;++i)
                dp[i][0] = i;
            for(int j=0;j<=n;++j)
                dp[0][j] = j;
            for(int i=1;i<=m;++i)
            {
                for(int j=1;j<=n;++j)
                {
                    if(word1[i-1]==word2[j-1])
                        dp[i][j] = dp[i-1][j-1];
                    else
                        dp[i][j] = 1+min(min(dp[i][j-1],dp[i-1][j]),dp[i-1][j-1]);
                }
            }
            return dp[m][n];
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 相关阅读:
    Hive时间日期函数一文详解+代码实例
    MySQL语法入门
    css知识学习系列(2)-每天10个知识点
    ubuntu18.04安装qgis、pyqgis
    IP地址、子网掩码、网络地址之间相关的计算
    说话人识别声纹识别CAM++,ECAPA-TDNN等算法
    论文《LogAnomaly:无结构日志中顺序和数量异常的无监督检测》翻译
    【LeetCode 130. 被围绕的区域】
    ChatGPT数据集之谜
    java集成datax
  • 原文地址:https://blog.csdn.net/qigezuishuaide/article/details/127719330