给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。
示例:
输入:
- A: [1,2,3,2,1]
- B: [3,2,1,4,7]
- 输出:3
- 解释:长度最长的公共子数组是 [3, 2, 1] 。
-
#include <stdio.h> #include <stdlib.h> #include "string.h" #define max(a, b) (((a) > (b)) ? (a) : (b)) int maxLen(int* nums1, int numsSize1,int *nums2,int numsSize2){ int result = 1; int dp[numsSize1+1][numsSize2+1]; for (int i = 1; i <= numsSize1; ++i) { for (int j = 1; j <= numsSize2; ++j) { dp[i][j] = 0; } } for (int i = 1; i <= numsSize1; ++i) { for (int j = 1; j <= numsSize2; ++j) { if (nums1[i-1] == nums2[j-1]) dp[i][j] = dp[i-1][j-1] + 1; if (dp[i][j] > result) result = dp[i][j]; } } printf("%d ",result); } int main() { int nums1[]={1,2,3,2,1}; int nums2[]={3,2,1,4,7}; maxLen(nums1,5,nums2,5); return 0; }