在面试中遇到的一道算法题,当时没写出来,现在写出来了,分享一下
1 function getLongSameStr(str1,str2){ 2 var subStr="";//记子串 3 var begin=0;//记存在的索引 4 var end=0;//记存在的索引 5 var maxLength=0;//记存最长子串的长度 6 var targetStr="";//记符合条件的子串 7 var targetArr=[];//记相同子串的集合 8 while(true){ 9 subStr=str2.substring(begin,end); 10 if(str1.indexOf(subStr)!=-1){ 11 //存在 12 end++; 13 targetArr.push(subStr); 14 }else{ 15 //不存在 16 begin++; 17 end=begin; 18 } 19 if(end==str2.split("").length+1){ 20 break; 21 } 22 } 23 for(var i=0;i<targetArr.length-1;i++){ 24 var tempLength=targetArr[i].split("").length; 25 var tempLength1=targetArr[i+1].split("").length; 26 if(tempLength<tempLength1){ 27 maxLength=tempLength1; 28 } 29 } 30 for(var i=0;i<targetArr.length;i++){ 31 var tempLength=targetArr[i].split("").length; 32 if(tempLength==maxLength){ 33 console.log(targetArr[i]); 34 } 35 } 36 return targetStr; 37 }
大体思路:拿一个字符串作为基串,另一个字符串作为对比串,记录对比的位置,当对比到有相同子串的时候,把记录末尾索引的end++,当没有对比到相同子串的时候,把记录开始位置的索引加1,记录末尾位置的索引等于开始位置的索引;然后把相同的子串都放在一个数组里,再循环找出最长的子串