作者在 2015-08-04 23:10:47 发布以下内容
一串字符串中可能会出现重复子串的情况,找出最长的重复的子串。
#include <stdio.h>
#include <stdlib.h>
#define maximum 30
void StrInitialization(char *h)
{
gets(h);
}
int StringLength(char *h)
{
int count=0;
while(h[count]>0)
count++;
return count;
}
void MaSubStr(char *h,char *t)
{
int lenmax=0,len,index=0;
int i=0,j,k;
while(i<StringLength(h))
{
j=1+1;
while(j<StringLength(h))
{
if(h[i]==h[j])
{
len=1;
for(k=0;h[i+k]==h[j+k];k++)
len++;
if(len>lenmax)
{
index=i;
lenmax=len;
}
j+=len;
}
else
j++;
}
i++;
}
for(i=0;i<lenmax;i++)
t[i]=h[index+i];
}
void DisplayString(char *h)
{
int i;
for(i=0;i<StringLength(h);i++)
printf("%c",h[i]);
printf("\n");
}
int main()
{
char str[maximum];
printf("输入串为:");
StrInitialization(str);
printf("\n");
char t[maximum];
int i;
MaSubStr(str,t);
printf("最长重复子串为:");
DisplayString(str);
printf("\n");
return 0;
}