题目描述:
给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。
示例:
输入:A: [1,2,3,2,1] B: [3,2,1,4,7]
输出:3
解释:长度最长的公共子数组是 [3, 2, 1]。
在LeetCode中这题属于中等难度题,一般来说中等难度题无法使用暴力法通过。但是本人头铁,就是想试一试,反正暴力法写起来相对来说是最简单的。当然,最主要的原因是通过暴力法我们能够清楚的感受到算法存在哪些不足、哪些地方可以改进。进而写出令自己满意的代码。
暴力法:
每次我们从A组中选取一个子数组,然后去B组中找到一个与它相同的。我们可以先选取长度为Math.max(A.length,B.length)的子数组,然后慢慢减少长度,直到长度为0.
public static int findLength(int[] A, int[] B) {
//取A中的一个子数组,然后去B中寻找相同的子数组
int windowSize = Math.min(A.length, B.length);
while (windowSize > 0) {
int start = 0;//用来记录目前A中子数组的开始下标