给两个整数数组 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
PYTHON:
class Solution(object):
def findLength(self, A, B):
"""
:type A: List[int]
:type B: List[int]
:rtype: 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):
# print i,j
if A[i-1] == B[j-1]:
dp[i][j] = dp[i-1][j-1] + 1
return max(max(row) for row in dp)
C语言:
int findLength(int* A, int ASize, int* B, int BSize) {
if (!ASize || ! BSize)
return 0;
int dp[ASize+1][BSize+1];
for(int i = 0;i<ASize+1;i++)
for(int j =0;j < BSize+1;j++)
dp[i][j] = 0;
for(int i = 1;i<ASize+1;i++)
for(int j =1;j < BSize+1;j++)
if(A[i-1] == B[j-1])
dp[i][j] = dp[i-1][j-1] + 1;
int max = 0 ;
for(int i = 0;i<ASize+1;i++)
for(int j =0;j < BSize+1;j++)
if (dp[i][j] >= max)
max = dp[i][j];
return max;
}