代码随想录算法训练营第五十八天 | 583. 两个字符串的删除操作 & 72. 编辑距离

1. 两个字符串的删除操作

583. 两个字符串的删除操作 - 力扣(LeetCode)

也可以求最长公共子序列的长度,再用原总长度 - 两个子序列

java 复制代码
class Solution {
    public int minDistance(String word1, String word2) {
        int l1 = word1.length();
        int l2 = word2.length();
        int[][] dp = new int[l1+1][l2+1];

        for(int i = 0; i < l1 + 1; i++) // word2为空时,word1需要删除的次数
            dp[i][0] = i;
        for(int j = 0; j < l2 + 1; j++) // word1为空时,word2需要删除的次数
            dp[0][j] = j;

        for(int i = 1; i <= l1; i++){
            for(int j = 1; j <= l2; j++){
                if(word1.charAt(i-1) == word2.charAt(j-1))
                    dp[i][j] = dp[i-1][j-1];
                else // 删word1, 删word2,两个都删
                    dp[i][j] = Math.min(Math.min(dp[i][j-1] + 1, dp[i-1][j] + 1), dp[i-1][j-1] + 2);
            }
        }

        return dp[l1][l2];
    }
}

2. 编辑距离

72. 编辑距离 - 力扣(LeetCode)

增加元素 = 在另一边删除元素 (操作次数一样)

修改元素 = 两边相等的情况

java 复制代码
class Solution {
    public int minDistance(String word1, String word2) {
        int l1 = word1.length();
        int l2 = word2.length();
        int[][] dp = new int[l1+1][l2+1];

        for(int i = 0; i < l1 + 1; i++) // word2为空时,word1需要删除的次数
            dp[i][0] = i;
        for(int j = 0; j < l2 + 1; j++) // word1为空时,word2需要删除的次数
            dp[0][j] = j;
        
        for(int i = 1; i <= l1; i++){
            for(int j = 1; j <= l2; j++){
                if(word1.charAt(i-1) == word2.charAt(j-1))
                    dp[i][j] = dp[i-1][j-1];
                else
                    dp[i][j] = 
                    Math.min(Math.min(dp[i][j-1]+1, dp[i-1][j]+1), 
                        dp[i-1][j-1]+1);
            }
        }

        return dp[l1][l2];
    }
}
相关推荐
拓恒技术4 小时前
无人机巡检AI算法的工程化落地:从需求到交付的5个核心环节
人工智能·算法·无人机
晨曦中的暮雨4 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
怕浪猫4 小时前
Claude Code vs Codex:Computer Use 实现原理深度拆解
算法·面试·github
文丑颜不良啊5 小时前
LeetCode876~900题目解析
java·leetcode
罗西的思考6 小时前
AI 时代的 “房谋杜断”:如何培养能力、品味与判断力
人工智能·算法·机器学习
淡海水6 小时前
07-02-源码-.NET Core GC分配路径
算法·unity·c#·.netcore·gc·1024程序员节
下一站春风里8 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
DRobot8 小时前
【机械制图与CAD实战(二十五)】螺纹的表示方法
算法·机械制图
用户老李8 小时前
卡尔曼滤波自学教程 10:无迹卡尔曼滤波(UKF)
算法
深圳市益普科技有限公司10 小时前
半导体良率管理YMS:良率与设备参数的相关性,先拉哪几组数据
人工智能·python·算法