1、题目描述
输入两个数组a和b,找出最长的相同子数组(subarray)。
2、思路
动态规划。
dp[i][j]:由a的第i位,b的第j位向前的子数组,最长的相同长度。
ans = max(dp[i][j]).
if(a[i-1]==b[j-1]) dp[i][j] = dp[i-1][j-1]+1;
dp[i][j]=0, otherwise.
要注意subarray和sequence的区别!!!
复杂度 O(n*m)
3、代码
int findLength(vector<int>& A, vector<int>& B) {
int n = A.size(),m=B.size();
int dp[n+1][m+1];
int ans=0;
for(int i=0;i<=n;i++) dp[i][0]=0;
for(int i=0;i<=m;i++) dp[0][i]=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(A[i-1]==B[j-1])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=0;
if(dp[i][j]>ans)
ans=dp[i][j];
}
}
return ans;
}