推荐公众号《代码随想录》卡尔哥动态规划讲的很不错。 五步走: 第一步:确定dp数组 dp[i][j],以下标i-1为结尾的A,和以下标j-1为结尾的B.遍历时从1开始遍历。 第二步:确定递推公式 dp[i][j]的状态只能由dp[i-1][j-1]推导。当dp[i-1]=dp[j-1]时,dp[i][j] = dp[i-1][j-1]+1; 第三步:初始化 dp[i][0],dp[0][j]都初始化为0 第四步:确定遍历顺序,从1开始遍历。 第五步:举例推导。
var findLength = function(nums1, nums2) {
const dp = new Array(nums1.length+1).fill(0).map(()=>new Array(nums2.length+1).fill(0))
let res = 0;
for(let i = 1;i<=nums1.length;i++){
for(let j = 1;j<=nums2.length;j++){
if(nums1[i-1]==nums2[j-1]){dp[i][j] = dp[i-1][j-1]+1}
res = Math.max(res.dp[i][j])
}
}
return res
}
|