求两个数组的公共子数组的最大长度

已知两个整数数组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;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值