欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

 分析:

 用滑动窗口解,见图

718. 最长重复子数组

 718. 最长重复子数组

代码:

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

}

结果:

718. 最长重复子数组

相关标签: Java Leetcode