void-man

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

求出一个字符串中,它是一个子串的多少次方,要求最大

用kmp算法求出next数组,当len%(len-next[len])==0时候,说明len-next[len]即为所能匹配的子串

kmp算法详见随笔里面有

#include <stdio.h>
#include
<string.h>

char s[1000010];
int next[1000010];

int len;
int main()
{

int i,j;
while(1)
{
scanf(
"%s",s);
if(s[0]=='.')break;
len
=strlen(s);
i
=0;next[0]=-1;j=-1;
while(i<len)
{
if(j==-1||s[i]==s[j])
{
++i;
++j;
next[i]
=j;
}
else j=next[j];
}
if(len%(len-next[len])==0)
{
printf(
"%d\n",len/(len-next[len]));
}
else printf("1\n");

}

return 0;
}
posted on 2011-04-17 11:42  void-man  阅读(513)  评论(0)    收藏  举报