分享

leetcode

 昵称70680357 2020-07-02

题目描述:

 

 方法一:动态规划 O(mn) O(mn)

复制代码
class Solution:
    def findLength(self, A: List[int], B: List[int]) -> int:
        n, m = len(A), len(B)
        dp = [[0] * (m + 1) for _ in range(n + 1)]
        ans = 0
        for i in range(n - 1, -1, -1):
            for j in range(m - 1, -1, -1):
                dp[i][j] = dp[i + 1][j + 1] + 1 if A[i] == B[j] else 0
                ans = max(ans, dp[i][j])
        return ans
语言 方法
2370 r0sMJ
XV1wH
  • 摆地摊一个月真实故事「血泪史」提醒各位
  • 3624 2009.01.05 09-57-35
    复制代码

    方法二:滑动窗口 O((m+n) * min(m,n)) O(1)

    复制代码
    class Solution:
        def findLength(self, A: List[int], B: List[int]) -> int:
            def maxLength(addA: int, addB: int, length: int) -> int:
                ret = k = 0
                for i in range(length):
                    if A[addA + i] == B[addB + i]:
                        k += 1
                        ret = max(ret, k)
                    else:
                        k = 0
                return ret
            
            n, m = len(A), len(B)
            ret = 0
            for i in range(n):
                length = min(m, n - i)
                ret = max(ret, maxLength(i, 0, length))
            for i in range(m):
                length = min(n, m - i)
                ret = max(ret, maxLength(0, i, length))
            return ret
    复制代码

    方法三:二分+哈希表  留坑*

      本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
      转藏 分享 献花(0

      0条评论

      发表

      请遵守用户 评论公约

      类似文章 更多