最长公共子串问题-动态规划

公共子串计算

https://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b?tpId=37&tqId=21298&rp=1&ru=/ta/huawei/&qru=/ta/huawei&difficulty=3&judgeStatus=&tags=/question-ranking

状态转移方程

如果str1[i] == str2[j],那么dp[i][j] = dp[i-1][j-1];

如果str1[i] != str2[j],那么dp[i][j] = 0;

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
let arr = [];
let str1;//存储第一行字符串
let str2;//存储第二行字符串
let max = 0;//存储最大公共子串的长度
rl.on('line', function (line) {
    arr.push(line.split(''));
    str1 = arr[0];
    str2 = arr[1];
    if(arr.length==2){
        let dp = new Array(str2.length+1);
        for(let i = 0; i < str2.length+1; i++){//初始化二维数组
            dp[i] = new Array(str1.length+1).fill(0);
        }
        for(let m = 1; m < dp.length; m++){//遍历二维数组
            for(let n = 1; n < dp[0].length; n++){
                if(str2[m-1]==str1[n-1]){//状态转移方程
                    dp[m][n] = dp[m-1][n-1]+1;
                    max = Math.max(max,dp[m][n])
                }
            }
        }
        console.log(max)
    }
});
全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 18:02
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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