题解 | #查找两个字符串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)
}
}
}
}