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; } }