题目链接
参考
解题思路
dp 矩阵:
// 假如 nums1[i] === nums2[k], 那么 dp[i][k] 即是它的左上角的值 + 1
1 0 0 0 1
1 1 0 0 0 1
0 0 2 1 1 0
0 0 1 3 2 0
1 1 0 0 0 1
1 1 0 0 0 1
解题代码
var findLength = function(nums1, nums2) {
// 切记生成二位矩阵的时候,不要用 const dp = Array(nums1.length).fill(() => Array(nums2.length).fill(0)), 因为是生成的 num2 的数组是同一个引用。
const dp = Array.from(Array(nums1.length), () => Array(nums2.length).fill(0));
let ret = 0;
for (let i = 0; i < nums1.length; i++) {
for (let k = 0; k < nums2.length; k++) {
// 假如相等那么就去处理即可
if (nums1[i] === nums2[k]) {
if (dp[i - 1] && dp[i - 1][k - 1]) {
dp[i][k] = dp[i - 1][k - 1] + 1;
} else {
dp[i][k] = 1;
}
ret = Math.max(dp[i][k], ret)
}
}
}
return ret;
};