思路就是建立一个二维的dp数组,只要nums1[i]==nums2[j](nums1和nums2出现重复元素就置1 并加上左上角的值)
为什么代码是nums1 i-1和nums2 i-1
答:因为i和j以1为初始值开始遍历的
为什么要这么做并且为什么要加dp【i-1】【j-1】?
我们观察dp数组,发现dp【i】【j】的左上角为1就是连续的重复子串,那就将所有的dp【i】【j】都加上左上角的值,ans再遍历的过程中同时取最大值就是我们要的答案
这也是为什么我们会在dp[i][j]多加上一行一列的原因,防止加上后越界
class Solution {static const int N = 1e3+7; int dp[N][N];
public:int findLength(vector<int>& nums1, vector<int>& nums2) {int ans=0;for(int i=1;i<=nums1.size();i++){for(int j=1;j<=nums2.size();j++){if(nums1[i-1]==nums2[j-1])dp[i][j]=1+dp[i-1][j-1];ans=max(ans,dp[i][j]);}}return ans;}
};