LeetCode 72. Edit Distance 题解

LeetCode 72. Edit Distance 题解

题目描述

给你两个单词 word1word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。

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

  1. 插入一个字符
  2. 删除一个字符
  3. 替换一个字符

示例 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')

解题思路

方法:动态规划

思路

  • 定义 dp[i][j] 为将 word1 的前 i 个字符转换为 word2 的前 j 个字符所需的最少操作数
  • 状态转移方程:
    • 如果 word1[i-1] == word2[j-1],则 dp[i][j] = dp[i-1][j-1]
    • 否则,dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1,分别对应删除、插入和替换操作
  • 初始化:
    • dp[i][0] = i,将 word1 的前 i 个字符删除为空字符串所需的操作数
    • dp[0][j] = j,将空字符串插入 j 个字符得到 word2 的前 j 个字符所需的操作数

复杂度分析

  • 时间复杂度:O(m × n),其中 m 和 n 是两个单词的长度。需要填充一个 m+1 × n+1 的表格。
  • 空间复杂度:O(m × n),需要一个 m+1 × n+1 的表格来存储状态。

代码实现

方法:动态规划

python 复制代码
class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        m = len(word1)
        n = len(word2)
        
        # 初始化 dp 表格
        dp = [[0] * (n + 1) for _ in range(m + 1)]
        
        # 初始化第一行和第一列
        for i in range(m + 1):
            dp[i][0] = i
        for j in range(n + 1):
            dp[0][j] = j
        
        # 填充 dp 表格
        for i in range(1, m + 1):
            for j in range(1, n + 1):
                if word1[i-1] == word2[j-1]:
                    dp[i][j] = dp[i-1][j-1]
                else:
                    dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1
        
        return dp[m][n]

测试用例

测试用例 1:

输入:word1 = "horse", word2 = "ros"

输出:3

测试用例 2:

输入:word1 = "intention", word2 = "execution"

输出:5

测试用例 3:

输入:word1 = "", word2 = "a"

输出:1

测试用例 4:

输入:word1 = "a", word2 = ""

输出:1

总结

本题是动态规划的经典问题,主要考察对状态定义和状态转移方程的理解。通过动态规划,我们可以高效地计算出将一个单词转换为另一个单词所需的最少操作数。

动态规划的核心思想是:通过填充一个二维表格,记录将 word1 的前 i 个字符转换为 word2 的前 j 个字符所需的最少操作数。根据当前字符是否匹配,选择不同的操作策略。

这种方法不仅适用于编辑距离问题,还可以应用于许多其他需要比较两个序列的问题,例如最长公共子序列、最长回文子串等。掌握动态规划的思想,对于解决这类问题非常重要。

相关推荐
爱刷碗的苏泓舒1 小时前
PPP-AR 中的参考星选取:数学原理、评价指标与切换处理
算法·gnss·模糊度固定·ppp-ar·星间单差·参考星·卫星端偏差
烬羽4 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
闪电悠米4 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
星空露珠5 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
QXWZ_IA6 小时前
桥梁数字孪生怎么落地?
人工智能·科技·算法·智能硬件·政务
Kel6 小时前
输出层与反分词(Output Layer & Detokenization)
人工智能·算法·架构
陕西企来客7 小时前
2026年7月技术好GEO优化方案:算法适配与内容策略
人工智能·算法·机器学习·技术好geo优化
风栖柳白杨7 小时前
【面试】AI算法工程师_空白自测版本
人工智能·算法·面试
闪电悠米8 小时前
力扣hot100-73.矩阵置零-标记数组详解
算法·leetcode·矩阵
栋***t8 小时前
从“纸质试卷”到“AI智能组卷”,麦塔在线考试系统如何重构出题逻辑?
java·大数据·人工智能·算法·重构