LeetCode(No.718)--最長重複子數組

給兩個整數數組 A 和 B ,返回兩個數組中公共的、長度最長的子數組的長度。

示例 1:

輸入:
A: [1,2,3,2,1]
B: [3,2,1,4,7]
輸出: 3
解釋:
長度最長的公共子數組是 [3, 2, 1]。

說明:

1 <= len(A), len(B) <= 1000
0 <= A[i], B[i] < 100

思路: 維護矩陣DP,DP[i][j]代表以A[i-1]與B[j-1]結尾的公共字串的長度,公共字串必須以A[i-1],B[j-1]結束,即當A[i-1] == B[j-1]時,DP[i][j] = DP[i-1][j-1] + 1; 當A[i-1] != B[j-1]時,以A[i-1]和B[j-1]結尾的公共字串長度爲0,DP[i][j] = 0。輸出最大的公共字串的長度即爲最長重複字串。

class Solution:
    def findLength(self, A: List[int], B: List[int]) -> int:
        n1 = len(A)
        n2 = len(B)
        dp = [[0 for _ in range(n2+1)] for _ in range(n1+1)]
        
        for i in range(1,n1+1):
            for j in range(1,n2+1):
                if A[i-1] == B[j-1]:
                    dp[i][j] = dp[i-1][j-1] + 1
        return max(max(row) for row in dp)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章