718. 最长重复子数组
程序员文章站
2022-06-28 11:15:34
...
难度:中等
给两个整数数组
A
和B
,返回两个数组中公共的、长度最长的子数组的长度。示例:
输入: 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
分析:
用滑动窗口解,见图
代码:
class Solution {
public int findLength(int[] A, int[] B) {
//用滑动窗口
int len_A = A.length,len_B = B.length;
int max = 0;
//A不动,B滑动
for (int i = 0; i < len_A; i++) {
int len = Math.min(len_A-i,len_B);
int max_1 = function(A,B,i,0,len);
max = Math.max(max,max_1);
}
//B不动,A滑动
for (int i = 0; i < len_B; i++) {
int len = Math.min(len_B-i,len_A);
int max_2 = function(A,B,0,i,len);
max = Math.max(max,max_2);
}
return max;
}
//参数分别是两个数组,两个数组的起始下标,滑动长度
public int function(int[] A,int[] B,int start_A,int start_B,int len){
int max = 0,temp = 0;
for (int i = 0; i < len; i++) {
if(A[start_A+i]==B[start_B+i])
temp++;
else temp=0;
max = Math.max(max,temp);
}
return max;
}
}