,,## Maximum Length of Repeated Subarray
找出两个数组的最大匹配子数组,其实就是跟最大的字串匹配一样的,双重循环,构造一个二维的表格,对于每一个格子的填写,如果a[i]!=b[j]
,那么dp[i][j]=0
,如果a[i]=b[j]
,那么dp[i][j] = dp[i-1][j-1] + 1
,这就是转移方程,要求的解就是这个表格中的最大值。
以下是代码:
class Solution {
public:
int findLength(vector<int>& a, vector<int>& b) {
int dp[1001][1001] = {0}, max = 0;
for (int i = 0; i < a.size(); i++) {
for (int j = 0; j < b.size(); j++) {
if(a[i] != b[j]) dp[i+1][j+1] = 0;
else dp[i+1][j+1] = dp[i][j] + 1;
if(dp[i+1][j+1] > max) max = dp[i+1][j+1];
}
}
return max;
}
};