給兩個整數數組 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)