描述
给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。
分析
-
dp[i][j]
dp[i][j]表示以nums1[i-1]结尾的子数组和以nums2[j-1]结尾的子数组重复的长度。 -
动态转移方程
dp[i][j] = dp[i-1][j-1] + 1; -
初始化
dp[i][0]、dp[0][j]都是0,这样方便后面dp[i][j]的计算,防止越界。
遍历过程中记录最大的长度
class Solution {
public int findLength(int[] nums1, int[] nums2) {
int[][] dp = new int[nums1.length+1][nums2.length+1];
int res = 0;
for(int i = 1; i <= nums1.length; i++){
for(int j = 1; j <= nums2.length; j++){
if(nums1[i-1] == nums2[j-1]){
dp[i][j] = dp[i-1][j-1] + 1;
}
if(dp[i][j] > res){
res = dp[i][j];
}
}
}
return res;
}
}