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: 3 Explanation: The repeated subarray with maximum length is [3, 2, 1].
Note:
- 1 <= len(A), len(B) <= 1000
- 0 <= A[i], B[i] < 100
class Solution {
public:
int findLength(vector<int>& A, vector<int>& B) {
int m = A.size();
int n = B.size();
if(!m || !n ) return 0;
int dp[m+1][n+1] = {};
int mx = 0;
for(int i=1; i<=m; i++)
{
for(int j=1; j<=n; j++)
{
if(A[i-1]==B[j-1])
{
dp[i][j] = dp[i-1][j-1] + 1;
}
mx = max(mx, dp[i][j]);
}
}
return mx;
}
};
class Solution {
public:
int findLength(vector<int>& a, vector<int>& b) {
int m = a.size(), n = b.size();
if (!m || !n) return 0;
vector<int> dp(n + 1);
int res = 0;
for (int i = m - 1; i >= 0; i--) {
for (int j = 0; j < n; j++) {
res = max(res, dp[j] = a[i] == b[j] ? 1 + dp[j + 1] : 0);
}
}
return res;
}
};