分类:
2009-09-16 13:45:35
#include
#define BUF_MAX 1000
int index; //子串起始位置
int len;//子串长度
void str_search(const char *str)
{
int i=0;
while(str[i]!='\0') ++i;
int strlen=i;
for(i=strlen/2;i>0;--i)
{
int zeronum=0;
for(int j=i;j
if (str[j]==str[j-i])
{
++zeronum;
if (zeronum==i)
{
index=j-2*i+1;
len=i;
return;
}
}
else
{
zeronum=0;
}
}
}
}
int main()
{
char str[BUF_MAX];
scanf("%s",str);
str_search(str);
printf("%d:%d\n",index,len);
}
说明:
假设str中有长度为m的连续子串,
则字符串移动m个位置后,与原串
s0 s1 s2 s3 ... sm-1 sm sm+1 sm+2 ..... sn
s0 s1 s2 .............sn
一定有连续m个位置的字符是相等的;
如果有多个解,只返回第一个;
http://blog.csdn.net/tailzhou/archive/2006/07/21/953919.aspx