题目链接:poj 2406
问给定的字符串最多能够一个子串重复几次得到。
求一遍KMP 利用KMP数组的性质求解即可。
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define FFF 1233333
char s[FFF];
int next[FFF];
int main()
{
while(scanf("%s",s))
{
// cout<<"s="<<s<<endl;
if(s[0]=='.')
{
break;
}
int len=strlen(s);
next[0]=-1;
next[1]=0;
int k=0;
int ans=0;
for(int i=2;i<=len;i++)
{
while(k>=0&&s[k]!=s[i-1])
k=next[k];
next[i]=++k;
}
if(len%(len-next[len])==0)
printf("%d\n",len/(len-next[len]));
else
printf("1\n");
}
return 0;
}