最长公共子序列-优化版-图解

82 阅读1分钟

最长公共子序列-优化版-图解,空间复杂度为O(min(m,n)) ,时间复杂度为O(mn),dp一维数组代表上一行的旧值,dp[j]代表dp[i][j]的子结构lcs。后面每次大循环是为了更新dp整行

image.png

/**
 * @param {string} text1
 * @param {string} text2
 * @return {number}
 */
var longestCommonSubsequence = function(text1, text2) {
    let dp=new Array(text2.length+1).fill(0)
    for(let i=1;i<=text1.length;i++){
        let pre=0
        for(let j=1;j<=text2.length;j++){
            let temp=dp[j]
            dp[j]=text1[i-1]==text2[j-1]?pre+1:Math.max(dp[j],dp[j-1])
            pre=temp
        }
    }
    return dp[text2.length]
};