求最长重复字串
一个长度为10000的字符串,写一个算法,找出最长的重复子串,如abczzacbca,结果是bc。
#include <stdio.h>
#include <string.h>
char str[100];
char ch[10];
void insert(int start,char *ch,int size);
void main(){
int num=0;
int StartFirst=0,StartSecond=0,TempWordSize,WordSize=0;
printf("Please input :");
gets(str);
for(char *Str=str;*Str!='\0';num++,Str++)
;
for(;(StartFirst+2*WordSize+1)<num;StartFirst++){
StartSecond=StartFirst+WordSize+1;
for(;(StartSecond+WordSize)<=num;StartSecond++){
TempWordSize=0;
for(;str[StartFirst+TempWordSize]==str[StartSecond+TempWordSize]&&StartFirst+TempWordSize<StartSecond;TempWordSize++)
;
if(TempWordSize>=WordSize){
WordSize=TempWordSize;
insert(StartFirst,ch,WordSize);
}
}
}
if(WordSize==0)
printf("NO\n");
else{
printf("%d\n",WordSize);
puts(ch);
}
}
void insert(int start,char *ch,int size){
for(int num=0;num<size;num++,start++,ch++)
*ch=*(str+start);
}
最笨的方法~~#include <string.h>
char str[100];
char ch[10];
void insert(int start,char *ch,int size);
void main(){
int num=0;
int StartFirst=0,StartSecond=0,TempWordSize,WordSize=0;
printf("Please input :");
gets(str);
for(char *Str=str;*Str!='\0';num++,Str++)
;
for(;(StartFirst+2*WordSize+1)<num;StartFirst++){
StartSecond=StartFirst+WordSize+1;
for(;(StartSecond+WordSize)<=num;StartSecond++){
TempWordSize=0;
for(;str[StartFirst+TempWordSize]==str[StartSecond+TempWordSize]&&StartFirst+TempWordSize<StartSecond;TempWordSize++)
;
if(TempWordSize>=WordSize){
WordSize=TempWordSize;
insert(StartFirst,ch,WordSize);
}
}
}
if(WordSize==0)
printf("NO\n");
else{
printf("%d\n",WordSize);
puts(ch);
}
}
void insert(int start,char *ch,int size){
for(int num=0;num<size;num++,start++,ch++)
*ch=*(str+start);
}
不知道大侠们有没有什么更好的办法,拿出来分享一下嘛~