• Leetcode 583


    看到这题我就想到了72,编辑距离那题真的是脑汁噩梦……

    回到这题上来,这题只是要求删除字符,那么必然是要求出两个单词之间的最长公共子序列。这个子序列越长,那么需要删除的字符就越少。

    那么显然这题就是要用动态规划了。比较两个字符的时候,分两种情况,字符一样和字符不一样

    dp[i][j]=

    word[i] == word[j], 那么就大家各进一步,1+dp[i+1][j+1]

    word[i] != word[j],那么挑选一个丢掉,max(dp[i][j+1], dp[i+1][j])

    最后考虑边界条件,i == len(word1) 或者 j == len(word2) 的时候,返回 0

    class Solution:
        def minDistance(self, word1: str, word2: str) -> int:
            maxi = len(word1)
            maxj = len(word2)
            dp = [[0] * (maxj + 1) for _ in range(maxi + 1)]
            for i in range(maxi + 1):
                dp[i][maxj] = 0
            for j in range(maxj + 1):
                dp[maxi][j] = 0
            for i in range(maxi - 1, -1, -1):
                for j in range(maxj - 1, -1, -1):
                    if word1[i] == word2[j]:
                        dp[i][j] = 1 + dp[i + 1][j + 1]
                    else:
                        dp[i][j] = max(dp[i + 1][j], dp[i][j+1])
            return maxi + maxj - 2 * dp[0][0]
  • 相关阅读:
    7.10.8107.79 小心80180048
    Sliverlight MD5
    WP 数据绑定Visibility
    WP7 剪贴板 Clipboard
    [10年之后我是谁]读书笔记
    linux面试题
    [你的灯亮着吗]读书笔记
    Linux命令行简明教程
    <Ruby入门教程>读书笔记
    [职场谎言系列]读书笔记
  • 原文地址:https://www.cnblogs.com/KakagouLT/p/15333546.html
Copyright © 2020-2023  润新知