力扣热门100题之编辑距离

核心思路

  • dp[i][j]:把 word1i 个字符 → 变成 word2j 个字符,最少操作数
  • 三种操作对应三种来源:
    1. 替换dp[i-1][j-1] + 1
    2. 删除dp[i-1][j] + 1
    3. 插入dp[i][j-1] + 1
  • 如果字符相等 ,就不用操作:dp[i][j] = dp[i-1][j-1]

通俗解释

  • dp[i][0] = i:word2 为空,word1 要删 i 次
  • dp[0][j] = j:word1 为空,要插 j 次

字符不同时:

  1. 替换 :把 word1 第 i 个换成 word2 第 j 个→ 前面 i-1,j-1 + 1 次
  2. 删除 :删掉 word1 第 i 个→ 前面 i-1,j + 1 次
  3. 插入 :给 word1 插一个字符→ 前面 i,j-1 + 1 次

三者取最小就是当前最优

完整代码实现:

复制代码
class Solution {
    public int minDistance(String word1, String word2) {
        int m = word1.length();
        int n = word2.length();

        int[][] dp = new int[m + 1][n + 1];

        // 初始化:一个为空,另一个全删/全插
        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.charAt(i-1) == word2.charAt(j-1)) {
                    dp[i][j] = dp[i-1][j-1];
                } else {
                    // 取替换、删除、插入 三者最小 +1
                    dp[i][j] = Math.min(
                        Math.min(dp[i-1][j-1], dp[i-1][j]),
                        dp[i][j-1]
                    ) + 1;
                }
            }
        }
        return dp[m][n];
    }
}
相关推荐
爱刷碗的苏泓舒6 小时前
PPP-AR 中的参考星选取:数学原理、评价指标与切换处理
算法·gnss·模糊度固定·ppp-ar·星间单差·参考星·卫星端偏差
烬羽9 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
闪电悠米9 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
WL学习笔记10 小时前
堆(数据结构)
数据结构·
星空露珠10 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
QXWZ_IA11 小时前
桥梁数字孪生怎么落地?
人工智能·科技·算法·智能硬件·政务
Kel11 小时前
输出层与反分词(Output Layer & Detokenization)
人工智能·算法·架构
陕西企来客12 小时前
2026年7月技术好GEO优化方案:算法适配与内容策略
人工智能·算法·机器学习·技术好geo优化
风栖柳白杨12 小时前
【面试】AI算法工程师_空白自测版本
人工智能·算法·面试
闪电悠米13 小时前
力扣hot100-73.矩阵置零-标记数组详解
算法·leetcode·矩阵