我用哈希做的,别人都用kmp
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long LL;
const int N=1e6+5;
LL in[N],sum[N];
int b=31;
int main()
{
vector<int>vis;
char ch[N];
in[0]=1;
for(int i=1;i<N;i++) in[i]=in[i-1]*b;
int len;
while(cin>>ch+1)
{ vis.clear();
if (ch[1]=='.'&&strlen(ch+1)==1) break;
len=strlen(ch+1);
for(int i=1;i<=len;i++)
if (len%i==0) vis.push_back(i);
sum[0]=0;
for(int i=1;i<=len;i++)
sum[i]=sum[i-1]*b+(LL)(ch[i]-'A'+1);
for(int i=0;i<vis.size();i++)
{
int m=vis[i];
LL s=sum[m];
int flag=0;
for(int j=m;j<=len-m;j+=m)
{
LL tmp=sum[j+m]-sum[j]*in[m];
if (tmp!=s)
{flag=1; break;}
}
if (flag==0) {cout<<len/m<<endl;break;}
}
}
return 0;
}
在这里插入代码片