12345678910111213141516171819202122232425262728293031// 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;};