描述
给出两个单词word1
和word2
,计算出将word1
转换为word2
的最少操作次数。
你可进行三种操作:
- 插入一个字符
- 删除一个字符
- 替换一个字符
len(word1),len(word2)<=500len(word1),len(word2)<=500
样例
样例 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')
这一题的思想是用动态规划来做:
想法
编辑距离算法被数据科学家广泛应用,是用作机器翻译和语音识别评价标准的基本算法。
最直观的方法是暴力检查所有可能的编辑方法,取最短的一个。所有可能的编辑方法达到指数级,但我们不需要进行这么多计算,因为我们只需要找到距离最短的序列而不是所有可能的序列。
思路和算法
我们可以对任意一个单词进行三种操作:
-
插入一个字符;
-
删除一个字符;
-
替换一个字符。
题目给定了两个单词,设为 A
和 B
,这样我们就能够六种操作方法。
但我们可以发现,如果我们有单词 A
和单词 B
:
-
对单词
A
删除一个字符和对单词B
插入一个字符是等价的。例如当单词A
为doge
,单词B
为dog
时,我们既可以删除单词A