js实现最长子串算法

var arr=["weeweadbshow","jhsaasrbgddbshow","ccbshow"];
function Longest(Arr){

//字符串长度排序,优先选择最短的字符串,尽可能的减少性能开支
Arr=String_ArraySort(Arr);
var wholeArr=[]  //最短字符串所能产生的所有子串
        ,fristStr=Arr.shift()  // 以最短子串为基准
        , count=0   //结果长度
        ,result=""; //结果

//截取子串
for (var i=0;i<fristStr.length;i++) {
     for (var j=i+1;j<=fristStr.length;j++) {
         wholeArr.push(fristStr.substring(i,j));
     }
}

//遍历所有的子串
for (var i=0;i<wholeArr.length;i++) {
      var AllArray=[];  //建立一个结果过渡数组

      //使用正则表达式来检索其他的字符串
      var patt=new RegExp(wholeArr[i]);
       for (var j=0;j<Arr.length;j++) {
          var reArr=Arr[j].match(patt);  //使用正则表达式来检索,match函数直接返回结果
              if (reArr) {   //如果没检索到,返回一个false值,如果匹配到就返回结果
                     AllArray=AllArray.concat(reArr);   //向结果过渡函数添加值
                } 
       }
      if (AllArray.length==Arr.length) { //验证是否在其他字符串中是否都匹配到了子串

           if (AllArray[0].length>count) {

               // 过渡结果
                count=AllArray[0].length;
                result=AllArray[0];
            }
       }
}
return result;
}
function String_ArraySort(Arr){
       return Arr.sort(function(str1,str2){
              return str1.length-str2.length;
   })
}
console.log(Longest(arr));
</script>

posted @ 2018-03-18 21:32  laiso  阅读(733)  评论(0编辑  收藏  举报