583.Delete Operation for Two Strings

25 年 8 月 22 日 星期五
198 字
1 分钟
python
#
# @lc app=leetcode.cn id=583 lang=python3
#
# [583] 两个字符串的删除操作
#

# @lc code=start
class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        n = len(word1)
        m = len(word2)
        @cache
        def dfs(i, j):
            if i < 0 or j < 0:
                return 0
            if word1[i] == word2[j]:
                return dfs(i-1, j-1) + 1
            return max(dfs(i, j-1), dfs(i-1, j))
        a = dfs(n-1, m-1)
        return n-a+(m-a)
# @lc code=end

python
#
# @lc app=leetcode.cn id=583 lang=python3
#
# [583] 两个字符串的删除操作
#

# @lc code=start
class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        n = len(word1)
        m = len(word2)
        # @cache
        # def dfs(i, j):
        #     if i < 0 or j < 0:
        #         return 0
        #     if word1[i] == word2[j]:
        #         return dfs(i-1, j-1) + 1
        #     return max(dfs(i, j-1), dfs(i-1, j))
        # a = dfs(n-1, m-1)
        # return n-a+(m-a)
        f = [[0] * (m+1) for _ in range(n+1)]
        for i, x in enumerate(word1):
            for j, y in enumerate(word2):
                # 这里不加一
                if word1[i] == word2[j]:
                    f[i+1][j+1] = f[i][j] + 1
                else:
                    f[i+1][j+1] = max(f[i+1][j], f[i][j+1])
        return f[n][m]

# @lc code=end

文章标题:583.Delete Operation for Two Strings

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/583delete_operation_for_two_strings[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。