718. 最长重复子数组
提示
给两个整数数组 nums1
和 nums2
,返回 两个数组中 公共的 、长度最长的子数组的长度 。
示例 1:
输入:nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7] 输出:3 解释:长度最长的公共子数组是 [3,2,1] 。
示例 2:
输入:nums1 = [0,0,0,0,0], nums2 = [0,0,0,0,0] 输出:5
提示:
1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 100
int findLength(int* nums1, int nums1Size, int* nums2, int nums2Size) {
int dp[nums1Size+1][nums2Size+1];
//dp[i][j]
int i,j,max=0;
//初始化
for(i=0;i<nums1Size;i++){
dp[i][0]=0;
}
for(j=0;j<nums2Size;j++){
dp[0][j]=0;
}
//递推公式
for(i=1;i<=nums1Size;i++){
for(j=1;j<=nums2Size;j++){
if(nums1[i-1] == nums2[j-1]){
dp[i][j] = dp[i-1][j-1]+1;
}
else
dp[i][j] =0;
max = max > dp[i][j] ? max :dp[i][j];
}
}
return max;
}