1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// nums1: [1,2,3,2,1]
// nums2: [3,2,1,4,7]
// 输出: 3

// dp[i][j] 定义为 nums1[0..i-1] 和 nums2[0..j-1] 的最长公共子序列的长度。
// 状态方程: dp[i][j]=dp[i-1][j-1]+1 当`nums1[i-1]=nums2[j-1]`时
// 初始化: dp[i][0] dp[0][j], 也就是动规数组里的第一行和第一列, 都是0, 最长公共子序列, 最少就是0。


/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number}
*/
var findLength = function(nums1, nums2) {
let result=0;
const m = nums1.length, n = nums2.length;
let dp = Array.from({length: m+1 }, () => Array(n+1).fill(0));
for(let i=1;i<=m;i++){
for(let j=1;j<=n;j++){
if(nums1[i-1]===nums2[j-1]){
dp[i][j]=dp[i-1][j-1]+1;
result=Math.max(result,dp[i][j]);
}

}
}
return result;


};