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; }