思路:动态规划
an[i][j] = 数组一第i个数和数组二第j个数的最长公共前缀,如果nums1[i] == nums2[j],那么an[i][j] 等于an[i-1][j-1] + 1;否则等于0,找到其中最大的即可
class Solution {
public:
vector<vector <int>> an;
int findLength(vector<int>& nums1, vector<int>& nums2) {
int l1,l2;
l1 = nums1.size();
l2 = nums2.size();
int maxx = 0;
for(int i = 0; i < l1; i++){
vector <int> an1;
an.push_back(an1);
for(int j = 0; j < l2; j++){
int t;
if(i == 0 || j == 0){
if(nums1[i] == nums2[j]){
t = 1;
maxx = max(t, maxx);
}else{
t = 0;
}
}else{
if(nums1[i] == nums2[j]){
// cout << "?";
t = 1 + an[i-1][j-1];
maxx = max(t, maxx);
}else{
t = 0;
}
}
an[i].push_back(t);
}
}
return maxx;
}
};