0%

leetcode 718 Solution

代码解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.demo.s718;


/**
*给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。
*/
public class Solution {
public int findLength(int[] A, int[] B) {
return A.length < B.length ? findMax(A, B) : findMax(B, A);
}

int findMax(int[] A, int[] B) {
int max = 0;
int an = A.length, bn = B.length;
for(int len=1; len <= an; len++) {
max = Math.max(max, maxLen(A, 0, B, bn - len, len));
}
for(int j=bn-an; j >= 0;j--) {
max = Math.max(max, maxLen(A, 0, B, j, an));
}
for(int i=1;i<an;i++) {
max = Math.max(max, maxLen(A, i, B, 0, an - i));
}
return max;
}

int maxLen(int[] a, int i, int[] b, int j, int len) {
int count = 0, max = 0;
for(int k = 0; k < len; k++) {
if(a[i+k] == b[j+k]) {
count++;
} else if(count > 0) {
max = Math.max(max, count);
count = 0;
}
}
return count > 0 ? Math.max(max, count) : max;
}
}