下面是我写的函数,没有考虑运算的时间。
第一个是计算出字符串中出现的子字符串出现的次数,
int Compare(char *s,char *c) { char *p=c; int n=0; int p1=strlen(c); int i=p1; while(true) { if (*s==*c) { s++; c++; i--; if (*c=='\0') { n++; c=p; } } else { s++; if (*s=='\0') { break; } c=p; } } return n; }
下面这个是是求最长的重复的子字符串
void MaxsubString(char *src) { char *p; p1=src; p2=src; int t=0; char dest[256]; int temp1=0,temp2=0,temp3=1;//temp1是子字符串出重复次数,temp2子字符串的长度,temp3记录子字符串的长度 for(int i=strlen(src)-1;i>1;i--) { for (int j=0;j<strlen(src);j++) { if (j+i<=strlen(src)) { memset(dest,NULL,sizeof(dest)); if (j<=i) { p1=src; for (t=j;t>0;p1++,t--); temp2=i-j; for (int k=0;k<=temp2;k++) { dest[k]=*p1; p1++; } temp1=Compare(src,dest); if(temp1>1) { if (temp2>=temp3) { temp3=temp2; printf("%s,%d\n",dest,temp3+1); } } } } } } }