NO.72 编辑距离 困难
思路一:动态规划 从递归到从顶向下记忆化再到从底向上的逐步优化过程记不记录了。直接给出最终的方法。
dp[i][j]的含义:word1的[0,i]子串和word2的[0,j]子串之间最少的编辑次数。
初始化:大小是[word1Length+1][word2Length+1],包含两个字符串的空子串。dp[0][0]不需要编辑即为0。第一列dp[i][0]表示word2是空,即word1每个字符都需要执行删除操作进行编辑。第一行dp[0][j]表示word1是空,即word1每次只需要对应word2的字符进行插入操作进行编辑。
状态转移:dp[i][j]如果word1的i元素和word2的j元素相等,则不需要编辑,所以编辑距离等于dp[i-1][j-1]的编辑距离;否则i元素和j元素不不相等,则可以进行替换、删除、插入操作,即替换dp[i-1][j-1]、删除dp[i-1][j]、插入[i][j-1],选择编辑距离最小的方式即可。
1 | public int minDistance(String word1, String word2) { |
时间复杂度:O(len1*len2)
本人菜鸟,有错误请告知,感激不尽!
更多题解和源码:github