题目链接
英文链接:https://leetcode.com/problems/edit-distance/
中文链接:https://leetcode-cn.com/problems/edit-distance/
题目详述
给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
- 插入一个字符
- 删除一个字符
- 替换一个字符
示例 1:
1 | 输入: word1 = "horse", word2 = "ros" |
示例 2:
1 | 输入: word1 = "intention", word2 = "execution" |
题目详解
- 经典的编辑距离问题。
f(i, j)
表示word1
前i
个字符变成word2
的前j
个字符的最少操作次数。- 如果
word1[i] == word2[j]
,显然f[i][j] = f[i - 1][j - 1]
。 - 如果
word1[i] != word2[j]
,则必然存在一次操作,这次操作是取插入、删除、替换这三者的最小值,即f[i][j] = 1 + Math.min(f[i][j - 1], Math.min(f[i - 1][j], f[i - 1][j - 1]))
。 - 注意首先进行初始化操作。
1 | public class LeetCode_00072 { |