求最长重复子串

如题,这个问题网上出现次数很多,我使用js写一下后缀数组方法求最长重复子串,一来加深印象,二来熟练一下js语法。

算法思路:

1.生成后缀数组

2.后缀数组按字母顺序排序,方便有重复子串的数组挨在一起

3.比较相邻数组,求最大前缀长度;记录所有结果中的最大前缀长度和数组

4.记录的数组取记录长度的前缀即结果

 

 1                 var str = "banana",
 2                     suffixArr = [],
 3                     len = str.length,
 4                     maxStrIndex = -1, 
 5                     maxLen = 0,i,j;      
 6                     
 7                 for (i=0; i<len; i++){    //生成后缀数组
 8                     suffixArr[i] = str.substring(i,len);
 9                     /*suffixArr[i] = "";  //不使用substring
10                     for(j=i;j<i+len;j++){
11                         suffixArr[i]+=str[j];
12                     }*/
13                 }
14                 suffixArr.sort();         //按字母排序
15                 
16                 for (i=0; i<len-1; i++){  //比较相邻数组求最长子串
17                     j=0;
18                     while(suffixArr[i][j]==suffixArr[i+1][j])
19                         j++;
20                     if(j>maxLen){
21                         maxStrIndex = i;
22                         maxLen = j;
23                     }    
24                 }
25                 console.log(suffixArr[maxStrIndex].substring(0,maxLen)); //最长重复子串ana

 

posted @ 2016-02-24 14:24  海绵小猪  阅读(686)  评论(0编辑  收藏  举报