下面是我写的函数,没有考虑运算的时间。
第一个是计算出字符串中出现的子字符串出现的次数,
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);
}
}
}
}
}
}
}