POJ 2406 Power Strings(KMP)
http://poj.org/problem?id=2406
求最小重复字串
KMP next函数
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#define nMAX 1000005
using namespace std;
int next[nMAX],len;
char s[nMAX];
void get_next()
{ //next[i]表示i前面匹配了几个字符
int i,j;
i=0,j=-1;
next[0]=-1;//初始化
while(i<=len)
{
if(j==-1||s[i]==s[j])
{
i++,j++;
next[i]=j;
}
else
j=next[j];
}
}
int main()
{
while(~scanf("%s",s))
{
len=strlen(s);
if(s[0]=='.')break;
get_next();
int ans=len-next[len];
if(len%ans==0) printf("%d\n",len/ans);
else printf("1\n");
}
return 0;
}

浙公网安备 33010602011771号