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

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

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

滑动窗口

// 1. 暴力方法:就是从较短的那个截取字符串,看长的里面有没有。但是不用按字符开始截取,可以按长度截取,也就是“滑动窗口”啦
// 2. 因为输出最先出现的那个,所以同一长度的遍历出一个就可以结束了
// 3. 而且要找最长的那个,不如就从长到短遍历,第一个找到就是最长的!!
// 难点在于那俩for循环的值上,要考虑清楚
let str1 = readline(), str2 = readline()
console.log(findLong(str1, str2))

function findLong(str1, str2) {
let shortStr, longStr, len, res
shortStr = str1.length > str2.length ? str2 : str1
longStr = str1.length > str2.length ? str1 : str2
len = shortStr.length
// i控制滑动窗口
for (let i = len; i >= 1; i--) {
    // j控制遍历开始位置
    for (let j = 0; j + i <= len; j+=1 ) {
        if (longStr.includes(shortStr.substr(j, i))) {
        // 找到一个就return
            return shortStr.substr(j, i)
        }
    }
}
}
全部评论

相关推荐

05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务