Given two integer arrays A
and B
,
return the maximum length of an subarray that appears in both arrays.
Example 1:
Input: A: [1,2,3,2,1] B: [3,2,1,4,7] Output: 3 Explanation: The repeated subarray with maximum length is [3, 2, 1].
Note:
- 1 <= len(A), len(B) <= 1000
- 0 <= A[i], B[i] < 100
DP
假设A[i]结尾的子数组与B[j]结尾的子数组最大公共串为sub(i,j),且公共串最后一个字符是A[i],B[j].
if A[i] == B[j]:
sub(i,j) = sub(i-1,j-1)+1
否则:
0
列一下sub的矩阵:
0 | 0 | 1 | 0 | 0 |
0 | 1 | 0 | 2 | 0 |
1 | 0 | 0 | 0 | 3 |
0 | 0 | 0 | 0 | 0 |
0 | 0 |
class Solution(object):
def findLength(self, A, B):
"""
:type A: List[int]
:type B: List[int]
:rtype: int
"""
sub = [[0 for _ in range(len(A))] for _ in range(len(A))]
res = 0
for i in range(len(A)):
for j in range(len(B)):
if A[i] == B[j]:
if i==0 or j ==0:
sub[i][j] = 1
else:
sub[i][j] = sub[i-1][j-1]+1
res = max(res,sub[i][j])
return res