/**
* 最长可重叠的重复子串
* 子串和子串相互比较
* 时间复杂度是O(n^2)
*/
public class LRS_Base {
public static int comlen(int a,int b,int size,char[] arr){
int len = 0;
while(b<size&&a<size&&arr[a]==arr[b]){
len++;
a++;
b++;
}
return len;
}
public static void LRS(char[] arr,int size){
int maxLen=0;//最长重复子串的长度
int Index=0;//最长重复子串的起始位置
int i,j,k;
for(i=0;i<size;++i){
for(j=i+1;j<size;++j){
int len2=comlen(i,j,size,arr);
if(len2>maxLen){
maxLen=len2;
Index=i;
}
}
}
StringBuilder sb = new StringBuilder();
for(k=Index;k<Index+maxLen;k++){
sb.append(arr[k]);
System.out.println("maxLen="+maxLen+",Index="+Index+"字符串是:"+sb.toString());
}
}
public static void main(String[] args) {
char[] arr = {'b','a','n','a','n','a'};
//char[] arr2 = {'a','b','c','d','a','b','c'};
int size = arr.length;
LRS(arr,size);
}
}
* 最长可重叠的重复子串
* 子串和子串相互比较
* 时间复杂度是O(n^2)
*/
public class LRS_Base {
public static int comlen(int a,int b,int size,char[] arr){
int len = 0;
while(b<size&&a<size&&arr[a]==arr[b]){
len++;
a++;
b++;
}
return len;
}
public static void LRS(char[] arr,int size){
int maxLen=0;//最长重复子串的长度
int Index=0;//最长重复子串的起始位置
int i,j,k;
for(i=0;i<size;++i){
for(j=i+1;j<size;++j){
int len2=comlen(i,j,size,arr);
if(len2>maxLen){
maxLen=len2;
Index=i;
}
}
}
StringBuilder sb = new StringBuilder();
for(k=Index;k<Index+maxLen;k++){
sb.append(arr[k]);
System.out.println("maxLen="+maxLen+",Index="+Index+"字符串是:"+sb.toString());
}
}
public static void main(String[] args) {
char[] arr = {'b','a','n','a','n','a'};
//char[] arr2 = {'a','b','c','d','a','b','c'};
int size = arr.length;
LRS(arr,size);
}
}