以两个数组为例,数组A与数组B最长重复子数组大小,思路如下: 以数组A为固定数组,以数组B为移动数组,两者一一比对 每完整比对一次后,数组B第一位与数组A第二位开始比对…直到数组B第一位与数组A最后一位比对,循环结束,并计算此次比对最大值 置换A与B位置,B作为固定数组,A作为移动数组,得出最终结果;比对两次最大值,取最大即可
class Solution { public int findLength(int[] A, int[] B) { //从左到右比对,得出最大子数组 int maxNum = selectArray(A,B); //从右到左比对,得出最大子数组 int _maxNum = selectArray(B,A); return maxNum > _maxNum ? maxNum : _maxNum; } private int selectArray(int[] A, int[] B){ int maxNum = 0; for(int i=0; i<A.length; i++){ int num = 0; for(int j=0; j<B.length; j++){ int z = i + j; if(z < A.length && A[z] == B[j]){ num++; maxNum = num > maxNum ? num : maxNum; }else{ num = 0; } } } return maxNum; } } ``