题解 | #查找两个字符串a,b中的最长公共子串#判断刚好
查找两个字符串a,b中的最长公共子串
https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506
let s1 = readline(); let s2 = readline(); let tmp = ""; if (s1.length > s2.length) { tmp = s1; s1 = s2; s2 = tmp; } let myS = ""; let s_window = ""; let flag; //滑动窗口 右边界每次i++放进去。左边界:如果子串重合,左不动;如果不重合,左边界删掉头部 //左边删掉头部后,右边界可以继续+1,因为上一个myS已经是同等数量中最早出现的,所以并不需要再次判断同等数量的新串 for (let i = 0; i < s1.length; i++) { s_window += s1[i]; // flag = new RegExp(s_window).test(s2);//每次循环都需要创建一个regexp对象,内存消耗太多 flag = s2.indexOf(s_window); //所以用indexOf if (flag != -1) { myS = s_window.length > myS.length ? s_window : myS; } else { s_window = s_window.slice(1); } } print(myS);