您的位置:首页 > 其它

LeetCode算法问题11 —— Maximum Length of Repeated Subarray

2017-11-05 16:51 441 查看
先看问题描述



给定两个整数型数组,要求找出相等的最长子串的长度。特别的,将数组长度限制在了1-1000,且数组元素限制在了0-100

本体采用了动态规划的算法,从最短相同子串慢慢累积到最长相同子串,每一个更长子串都是基于上一次较短子串获得的。

这里定义一个数组C[i][j]记录以给定数组A[i]和B[j]结尾的相同子串长度,也就是说,如果A[i] 和B[j]不相同,则相同子串在此处已经完结,如果相同,则它是在上一个状态的基础上加一,即C[i - 1][j - 1] + 1。

因此可得计算式

C[i][j]=(A[i]==B[j]?C[i−1][j−1]+1:0);

每次获得新的C[i][j],与当前遇到最大值比较,最后返回最大值即可。

代码如下:

int findLength(vector<int>& A, vector<int>& B) {
vector<vector<int> > C(A.size() + 1, vector<int>(B.size() + 1, 0));
int result = 0;
for (int i = 1; i < A.size() + 1; ++i) {
for (int j = 1; j < B.size() + 1; ++j) {
if (A[i - 1] == B[j - 1]) {
C[i][j] = C[i - 1][j - 1] + 1;
}
result = result > C[i][j] ? result : C[i][j];
}
}
return result;
}


牵扯两层循环,复杂度为O(len(A)len(B))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: