题解 | #查找两个字符串a,b中的最长公共子串#

查找两个字符串a,b中的最长公共子串

https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    let arr = [];
    while(line = await readline()){
        arr.push(line);
    }
    if(arr[0] == arr[1]){
        console.log(arr[0]);
        return;
    }
    let duan = '', chang = '';
    if(arr[0].length<arr[1].length){
        duan = arr[0];
        chang = arr[1];
    }else{
        duan = arr[1];
        chang = arr[0];
    }

    let dp = [];
    let max_len = 0;
    let heng = 0, zong= 0;
    for(let i=0;i<=duan.length;i++){
        dp[i] = [];
        for(let j=0;j<chang.length;j++){
            if(i==0||j==0){
                dp[i][j] = 0;
            }else{
                if(duan[i-1] == chang[j-1]){
                    dp[i][j] = dp[i-1][j-1] + 1;
                    if(dp[i][j]>max_len){
                        max_len = dp[i][j];
                        heng = i;
                        zong = j;
                    }
                }else{
                    dp[i][j] = 0;
                }
            }
        }
    }

    // 回溯 取到短串中第一次出现的
    let duan_arr = duan.split('');
    let str = []
    while(dp[heng][zong] != 0){
        str.push(duan_arr[heng-1]);
        heng--;
        zong--;
    }
    str = str.reverse().join('');   // 别忘了reverse,因为是倒着往前回溯的
    console.log(str);

}()

全部评论

相关推荐

12-28 09:59
复旦大学 Java
点赞 评论 收藏
分享
程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
11-04 22:56
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
12-24 20:52
武汉大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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