一、题目
给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
- 插入一个字符
- 删除一个字符
- 替换一个字符
示例 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')
二、解决
1、递归(暴力DFS)
思路:
两个单词word1、word2,三种操作insert、delete、replace。 总共可能性有6种,其中两两等价:
(1)insert x from word1 == delete x from word2. e.g. {
a, ax}-->{
ax, ax} or {
a, a}
(2)delete x from word1 == insert x from word2. e.g. {
ax, a}-->{
ax, ax} or {
a, a}
(3)replace x as y from word1 == replace y as x from word2. e.g. {
ax, ay}-->{
ay, ay} or {
ax, ax}
D[i][j] = D[i][j-1] + 1
解释:insert x into word1 == word2, word1(tail) add x, x == j-th character in word2.
例子:D[i][j-1]--horse 到 ro 的编辑距离为 a;
则 D[i][j] --horse 到 ros 的编辑距离不会超过 a + 1
D[i][j] = D[i-1][j] + 1
解释:word1 == insert x into word2, word2(tail) add x, x == i-th character in word1.
例子:hors 到 ros 的编辑距离为 b,那么 horse 到 ros 的编辑距离不会超过 b + 1
D[i][j] = D[i-1][j-1]
解释:i-th character in word1 == j-th character in word2.
例子: {
a, a}--->{
as, as}
D[i][j] = D[i-1][j-1] + 1
解释:i-th character in word1 != j-th character in word2.
例子:{
ab, ac}-->{
ax, ax}
代码:
public int minDistance