本文记录一下Leetcode动态规划: 最短编辑距离问题的解法。
1. 题目描述
给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
示例1
示例2
2. 解题思路
深度理解编辑的含义:
模式识别:
- 一旦涉及子问题,可以用自顶向下的递归,和自底向上的动态规划
3. 算法实现
递归解法
对于上述递归算法的实现,在运行时会超时,原因是存在大量的重复计算:
这里我们有两种优化方式:
动态规划解法
我们从上面的解题思路中抽象出状态转移方程:
-
如果$word1[i]==word2[j]$,那么$op[i][j]=op[i-1][j-1]$
-
否则, $op[i][j]=1+min(op[i][j-1], op[i-1][j], op[i-1][j-1])$
ps: 这里的op[i][j]的含义为将word1[0..i]变成word2[0..j]所需要的最小操作次数
[参看]: