动态规划—72. 编辑距离
前言
编辑距离问题是字符串处理中的经典问题之一,广泛应用于拼写纠正、DNA序列比对等领域。通过计算将一个字符串转换为另一个字符串所需的最小操作数,能够帮助我们评估它们之间的相似度。本文将详细分析编辑距离问题的基本思路,提供动态规划的实现方法,并展示 Python 和 C++ 的代码示例。
题目描述
基本思路
1. 问题定义
编辑距离(Edit Distance)是衡量两个字符串之间相似度的一种方法,定义为将一个字符串转换为另一个字符串所需的最少操作次数。允许的操作包括插入字符、删除字符和著换字符。
2. 理解问题和递推关系
- 设定两个字符串
word1
和word2
,其长度分别为 m m m 和 n n n 。 - 定义 d p [ i ] [ j ] dp[i][j] dp[i][j] 为将
word1
的前 i i i 个字符转换为word2
的前 j j j 个字符所需的最小操作次数。 - 递推关系:
- 如果 w o r d 1 [ i − 1 ] = = w o r d 2 [ j − 1 ] word1[i-1] == word2[j-1] word1[i−1]==word2[j−1], 则 d p [ i ] [ j ] = d p [ i − 1 ] [ j − 1 ] d p[i][j]=d p[i-1][j-1] dp[i][j]=dp[i−1][j−1] (不需要任何操作)。
- 如果不相等,考虑三种操作:
- 插入: d p [ i ] [ j − 1 ] + 1 d p[i][j-1]+1 dp[i][j−1]+1
- 删除: