本题出处
本题是来自于Leetcode的一道题目,算是一道经典题目。最大公共子串问题。此处温馨提醒,注意区分最大公共子串和最大公共子序列。
问题描述:
Given two integer arrays A and B, return the maximum length of an subarray that appears in both arrays.
Example 1:
Input: A: [1,2,3,2,1] B: [3,2,1,4,7]
Output: 3Explanation:
The repeated subarray with maximum length is [3, 2, 1].
Note: 1 <= len(A), len(B) <= 1000
0 <= A[i], B[i] < 100
Solution:
class Solution {
public:
int findLength(vector<int>& A, vector<int>& B) {
int ret = 0;
int am[1000][1000] = {0};
for (int x = 0; x < A.size(); ++x) {
for (int y = 0; y < B.size(); ++y)
if (A[x] == B[y]) {
if (x == 0 || y == 0) {
am[x][y] = 1;
} else {
am[x][y] = am[x-1][y-1] + 1;
}
if (am[x][y] > ret)
ret = am[x][y];
}
}
return ret;
}
};