别人的做法
int findLength(vector<int>& A, vector<int>& B) {
int len1 = A.size(), len2 = B.size(),maxNum=0;
vector<vector<int>> dp(len1 , vector<int>(len2 , 0));
for (int i = 0; i < len1; ++i) {
for (int j = 0; j < len2; ++j) {
if (i == 0 || j == 0) {
dp[i][j] = A[i] == B[j] ? 1 : 0;
}
else if (A[i] == B[j])
{
dp[i][j] = dp[i - 1][j - 1] + 1;
maxNum = max(maxNum, dp[i][j]);
}
else
dp[i][j]=0;
}
}
return maxNum;
}
改进后的正确代码:
class Solution {
public:
int findLength(vector<int>& nums1, vector<int>& nums2) {
int len1 = nums1.size(),len2 = nums2.size(),maxlen = 0;
vector<vector<int>> dp(len1,vector(len2,0));
for(int i = 0;i < len1;i++){
for(int j = 0;j < len2;j++){
if(i == 0 || j == 0){
dp[i][j] = (nums1[i] == nums2[j] ? 1:0);
}
else if(nums1[i] == nums2[j]){
dp[i][j] = dp[i-1][j-1] + 1;
}
maxlen = max(dp[i][j],maxlen);
}
}
return maxlen;
}
};