描述
给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。
你总共三种操作方法:
插入一个字符
删除一个字符
替换一个字符
样例
1
输入:
“horse”
“ros”
输出: 3
解释:
horse -> rorse (替换 ‘h’ 为 ‘r’)
rorse -> rose (删除 ‘r’)
rose -> ros (删除 ‘e’)
2
输入:
“intention”
“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个字符所需要的操作数
初始状态 dp[0][j] (0<=j<=word2.length()) = j
dp[i][0] (0<=i<=word1.length()) = i
关系式 对于任意状态下的dp[i][j]可以由三种方式得出
1. 如果word1[i] == word2[j],此时从word1转换为word2 和 dp[i-1][j-1]相同,如: hors转换为ros 与hor和ro相同,s不需要管
2. 如果不相等,此时分为三种方式
2.1 把word1[i]替换为word2[j] 1+dp[i-1][j-1] 如:horse转换为ros 多一步 e转换为s
2.2 删掉word1[i] 1+dp[i-1][j] 如:horse转换为ros 比较 hors 转换为 ros 只需要插入一个e
2.3 删除word2[j] 1+dp[i-1][j] 同2.2
代码
1 | class Solution { |
-------------end of file
thanks for reading-------------