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

公共子串计算

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)
    }
});
全部评论

相关推荐

蚂蚁 基架java (n+6)*16 签字费若干
点赞 评论 收藏
分享
牛客154160166号:9月底还给我发短信,好奇怪,我24届的
点赞 评论 收藏
分享
10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务