题解 | #查找两个字符串a,b中的最长公共子串#
查找两个字符串a,b中的最长公共子串
https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); let [a, b, num] = [undefined, undefined, 0] rl.on('line', function (line) { num++ if(num === 1){ a = line }else if(num === 2){ b = line } if(num === 2) { console.log(getCommonStr(a,b)) } }); /** * @function 找到a、b字符串的公共子字串 * @params 两个字符串 * @return 两个字符串的公共子串 */ function getCommonStr(a: string, b:string){ // 1、得到较长长度的字符串 const longStr = a.length > b.length? a : b const shortStr = a.length > b.length? b : a // 2、初始化公共字符串与临时字符串 let [commmon, tmp] = ['',''] // 3、循环遍历短字符串的各个字串,看是不是包含在长字符串中 for(let i = 0; i < shortStr.length; i++){ for(let j = shortStr.length - 1; j >= i; j--){ // 4、如果包含在长字符串中,证明是公共子字符串 if(longStr.indexOf(shortStr.slice(i, j+1)) !== -1){ tmp = shortStr.slice(i, j+1) } // 5、如果临时保存的公共字符串长度大于common的则重新赋值给common if(tmp.length > commmon.length){ commmon = tmp } } } // 6、最后得到的就是最长的公共子字符串了 return commmon }