给两个整数数组 A
和 B
,返回两个数组中公共的、长度最长的子数组的长度。
输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出:3 解释: 长度最长的公共子数组是 [3, 2, 1]
动态规划,dp[i][j]表示 A 中前 i 个数字和 B 中前 j 个数字中最长子数组的长度
所以,当A[i]=B[j],dp[i][j] = dp[i-1][j-1]+1
如果A[i]不等于B[j],dp[i][j] = 0
class Solution {
public:
int findLength(vector<int>& A, vector<int>& B) {
vector<vector<int>> dp(A.size(), vector<int>(B.size()));
int maxl = 0;
for(int i = 0, j = 0; i < A.size(); i++){
if(A[i] == B[j]){
dp[i][j] = 1;
maxl = 1;
}
else
dp[i][j] = 0;
}
for(int i = 0, j = 0; j < B.size(); j++)
{
if(A[i] == B[j])
{
dp[i][j] = 1;
maxl = 1;
}
else
dp[i][j] = 0;
}
for(int i = 1; i < A.size(); i++)
{
for(int j = 1; j < B.size(); j++)
{
if(A[i] == B[j])
{
dp[i][j] = dp[i-1][j-1] + 1;
}
else
{
dp[i][j] = 0;
}
maxl = max(maxl, dp[i][j]);
}
}
return maxl;
}
};