题解 | 最长公共子序列(二)

最长公共子序列(二)

https://www.nowcoder.com/practice/6d29638c85bb4ffd80c020fe244baf11

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * longest common subsequence
 * @param s1 string字符串 the string
 * @param s2 string字符串 the string
 * @return string字符串
 */
function LCS( s1 ,  s2 ) {
    // write code here
    const m = s1.length
    const n = s2.length
    const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));
    
    for (let i = 0; i<m; i++) {
        for (let j = 0; j<n; j++) {
            if (s1.charAt(i) === s2.charAt(j)) {
                dp[i+1][j+1] = dp[i][j] + 1
            }
            else {
                dp[i+1][j+1] = Math.max(dp[i][j+1], dp[i+1][j]);
            }
        }
    }

    if (dp[m][n] === 0) {
        return -1
    }

    let i = m
    let j = n
    let LcsStr = ''
    while( i>0 && j>0) {
        if (s1.charAt(i-1) === s2.charAt(j-1)) {
            LcsStr = s1.charAt(i-1) + LcsStr
            i--
            j--
        }
        else if (dp[i][j-1] > dp[i-1][j-1]) {
            j--
        }
        else {
            i--
        }
    }
    return LcsStr
}
module.exports = {
    LCS : LCS
};

全部评论

相关推荐

代码飞升_不回私信人...:别这样贬低自己,降低预期,放平心态,跟昨天的自己比。做好自己,反而会效率更高心态更好,加油兄弟
点赞 评论 收藏
分享
12-14 11:43
黑龙江大学 Java
用微笑面对困难:确实比较烂,可以这么修改:加上大学的qs排名,然后大学简介要写一些,然后硕士大学加大加粗,科研经历第一句话都写上在复旦大学时,主要负责xxxx,简历左上角把学校logo写上,建议用复旦大学的简历模板
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务