在面試中遇到的一道算法題,當時沒寫出來,現在寫出來了,分享一下
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,記錄末尾位置的索引等於開始位置的索引;然后把相同的子串都放在一個數組里,再循環找出最長的子串
