给两个整数数组 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
解答:
方法和求两个字符串的最长公共子串的做法一样,动态规划的方法。
public class 最长公共子数组 {
public int findLength(int[] A, int[] B) {
int len1=A.length;
int len2=B.length;
int[][]dp=new int[len1+1][len2+1];
int max=0;
for(int i=1;i<=len1;i++){
for(int j=1;j<=len2;j++){
dp[i][j]=A[i]==B[j]?dp[i-1][j-1]+1:0;
max=Math.max(max,dp[i][j]);
}
}
return max;
}
}