LC 速查

HOT 100索引 › B16 多维动态规划 Multi-dimensional DP

LC 72编辑距离Edit Distance 中等

每次可插入、删除或替换一个字符,求把 word1 变成 word2 的最少操作次数。

思路 经典编辑距离:相等取左上,否则 min(左上替换, 上删除, 左插入) + 1,边界为空串长度。时间 O(mn)。

class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        m, n = len(word1), len(word2)
        f = [[0] * (n + 1) for _ in range(m + 1)]
        for i in range(m + 1):
            f[i][0] = i
        for j in range(1, n + 1):
            f[0][j] = j
        for i in range(1, m + 1):
            for j in range(1, n + 1):
                if word1[i - 1] == word2[j - 1]:
                    f[i][j] = f[i - 1][j - 1]
                else:
                    f[i][j] = 1 + min(f[i - 1][j],
                                      f[i][j - 1],
                                      f[i - 1][j - 1])
        return f[m][n]
← 上一题 最长公共子序列只出现一次的数字 下一题 →