本题为LeetCode题库中第72题编辑距离,难度困难,题目请参考这里。这道题应该是字符串处理,自然语言算法工程师必做一道题目,很久都没想到解决思路突然有了灵感。
标准的DP题目,这道题的难点还是在于如何去定义状态转移方程,前面分享的那道地下城游戏也是难在定义状态转移方程,所以如何去定义才是最重要的!然后就是推导出如何变换。这种题很容易就想复杂了,而且情况一多根本就不知道怎么入手,这就陷入了僵局,如何跳出来?只能多刷题培养这种思维。
定义:
当字符串word1的长度为i,字符串word2的长度为j,dp[i][j]定义为将word1转为word2所使用的最少操作次数。
其实上面这个定义才是这道题最关键的部分,只要给出了定义,从定义出发来推导状态转移方程。其实做了那么多的动态规划题目,无非就是从dp[i-1][j],dp[i][j-1],dp[i-1][j-1]中找出和dp[i][j]的关系。下面我们来疏导这几个dp数组和dp[i][j]之间的关系,把关系理清楚了,状态转移方程自然也就出来了。
- 如果字符word1[i]和字符word2[j]相同,这个时候就不需要进行任何操作,往前推即有dp[i][j] = dp[i-1][j-1],这里没有进行操作也就不用加一。
- 如果字符word1[i]和字符