错误的分析

递归解法
class Solution: def minDistance(self, word1: str, word2: str) -> int: def dp(i, j): """ dp(i, j): word_i, word_j的最短编辑距离 假设: word:x_1...x_n y_1...y_m 编辑结果:z_1...z_k 显然z_必然然属于set(x) | set(y), 即z中的元素要么属于x, 要么属于y(或者两者共有) 若x_n == y_m, 显然。 若x_n != ym, 假设z_k == x_n, 那么y中 经过增 删 替换后必要有 y_ == z_k: 替换: 1 + dp(i-1, j-1) 将y_m替换成x_n 增加: 1 + dp(i-1, j) 增加y_(尾部), 使得y_= x_n 删除: 1 + dp(i, j-1) 删除y_m 反之亦然。 """ # base case if i < 0: return j + 1 if j < 0: return i + 1 # make progress if word1[i] == word2[j]: return dp(i - 1, j - 1) else: return 1 + min( dp(i, j - 1), dp(i - 1, j), dp(i - 1, j - 1) ) return dp(len(word1) - 1, len(word2) - 1)
正确的分析