import java.util.*;
/**
* NC183 最长公共子数组
* @author d3y1
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param A int整型一维数组
* @param B int整型一维数组
* @return int整型
*/
public int longestCommonSubarry (int[] A, int[] B) {
return solution(A, B);
}
/**
* 动态规划
*
* dp[i][j]表示A中以第i个整数为结尾(A[i-1]必选)且B中以第j个整数为结尾(B[j-1]必选)时的公共子数组的长度
*
* { dp[i-1][j-1] + 1 , A[i-1] == B[j-1]
* dp[i][j] = {
* { 0 , A[i-1] != B[j-1]
*
* @param A
* @param B
* @return
*/
private int solution(int[] A, int[] B){
int lenA = A.length;
int lenB = B.length;
int[][] dp = new int[lenA+1][lenB+1];
int result = 0;
for(int i=1; i<=lenA; i++){
for(int j=1; j<=lenB; j++){
if(A[i-1] == B[j-1]){
dp[i][j] = dp[i-1][j-1] + 1;
result = Math.max(result, dp[i][j]);
}else{
dp[i][j] = 0;
}
}
}
return result;
}
}