已知两个整数数组A,B。比如A=[2,2,2,3,3,1,5,0] B=[2,3,6,5,2,3,9],我们定义子数组为某一个数组里面的连续的一个或多个数组成的数组。
比如[2,3]既是A又是B的子数组,但[6,5]只是B的子数组,不是A的,[2,3]是A,B的公共子数组。
要求:写一个函数 int f(A,B),返回任意两个数组的最长公共子数组的长度(元素个数),在上面的例子中要返回2。
注意:1)不能增加额外的数组或其他存储;只能使用若干个变量;不能使用长字符串
2)请以保证正确为优先考虑;可以不用考虑是否是最优先的算法
int f(int[] A, int[] B) {
int curIndexLength = 0;
int endIndexLength = 0;
for (int i = 1; i < A.length; i++) {
for (int j = 0; j + i <= A.length; j++) {
int start = j;
int end = start + i;
for (int n = 0; n < B.length; n++) {
if (A[start] == B[n]) {
if ((end - start) <= (B.length - n)) {
int tmp_m = start;
int tmp_n = n;
while (tmp_m < end) {
if (A[tmp_m] != B[tmp_n])
break;
tmp_m++;
tmp_n++;
}
if (tmp_m == end){
curIndexLength = end - start;
if (curIndexLength > endIndexLength)
endIndexLength = curIndexLength;
}
}
}
}
}
}
return endIndexLength;
}