NC127 最长公共子串

滑动窗口法
- 判断两个字符串长短,str1.length>str2.length则交换;
- 循环遍历短字符串str1来截取子串,定义一个maxLen保存最长子串的长度;
- 如果str1的字串存在str2中,则把字串赋值给res保存,并且flag++确保下次遍历截取str1子串的左区间保持原样,右区间向右滑动一个字符;
- 如果str1的字串不存在str2中,flag不变,i++,窗口整体向右滑动一个字符
/**
* longest common substring
* @param str1 string字符串 the string
* @param str2 string字符串 the string
* @return string字符串
*/
function LCS( str1 , str2 ) {
// write code here
if(str1.length>str2.length){
[str1,str2] = [str2,str1];
}
let len = str1.length;
let res='';
let maxLen = 0; //记录最长子串的长度
for(let i = 0;i<len;i++){
let tempStr = str1.slice(i-maxLen,i+1)
if(str2.indexOf(tempStr) !== -1){
res = tempStr;
maxLen++;
}
}
return res;
}
module.exports = {
LCS : LCS
};