js(103)~剑指 Offer II 095. 最长公共子序列-动态规划-1143. 最长公共子序列

128 阅读1分钟

1143. 最长公共子序列

2022年3月23日 更新 这都题和上面的题一样,都是求最长公共子序列,我发现,即便都不会写,看一遍题解分析,重点看看别人画的二维数组讲解,能够更好的理解代码 上次的代码可以继续精简


力扣本题传送门

image.png

这道题看不明白啊,只能跟着答案先马一遍,

动态规划看了不少文章和解释,好像核心就在倒推两字,从得到答案的最后一种情况倒推,分析思路然后在写代码,但是这道最长子序列好像不能倒推

var longestCommonSubsequence = function(text1, text2) {
    const m = text1.length, n = text2.length;
    const dp = new Array(m+1).fill(0).map(() => new Array(n+1).fill(0));
    // 注意这里取从i=1 开始 因为text1的最大的坐标比m少1 
    for(let i = 1; i<=m;i++){
        let c1 = text1[i-1]
        for(let j =1; j <= n; j ++){
            let c2 = text2[j-1];
            if(c1 === c2) {
                dp[i][j] = dp[i-1][j-1] + 1;
            } else {
                dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1])
            }
        }
    }

    return dp[m][n];
};