代码随想录算法训练营第五十八天 | 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];
    }
}
相关推荐
Jasmine_llq几秒前
《P17461 [GESP202609 八级] 生成树计数》
算法·栈·tarjan 算法·边双连通分量·深度优先搜索 dfs·tarjan 保存当前路径节点·模乘法
Jasmine_llq2 分钟前
《P17462 [GESP202609 八级] 末班车》
算法·dijkstra 算法·最大化版本,求最长可行值·建反向图(逆图 / 反转边)·多源 dijkstra 思想·对每个终点单独跑一遍djst·离线预处理 + 在线查询
the3clipse1 小时前
H.265熵编码核心:CABAC自适应二进制算术编码详解——如何将语法元素高效压缩为比特流
人工智能·算法·视频编码·h.265·hevc·cabac·cavlc
CQU_JIAKE1 小时前
10.4【A】
算法
Godspeed Zhao1 小时前
现代智能雷达技术19——算法(5)
算法
(Charon)1 小时前
【C++面试】RAII到底是什么:从资源管理理解C++对象生命周期
c++·算法·面试
Omics Pro1 小时前
之江实验室NAR|虚拟细胞3阶段训练范式
数据库·人工智能·算法·机器学习·自然语言处理
Tisfy1 小时前
LeetCode 0678.有效的括号字符串:O(n)+O(1)一次遍历
算法·leetcode·字符串·题解·贪心·括号匹配
小O的算法实验室1 小时前
IEEE TEVC,学习辅助的搜索路径重构进化算法
学习·算法·重构
Liuchang09112 小时前
洛谷 P2670 [NOIP 2015 普及组] 扫雷游戏
c++·算法·游戏