思路:
首先我们知道,1到i和n-i+1到n匹配的话,那么这被分出来的三段都是相等的
那么我们就好求了
c o d e code code
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
string s;
int next[1000100];
int main()
{
cin>>s;
while(s!=".")
{
memset(next, 0, sizeof(next));
next[0]=-1;
int k=-1;
for(int i=1; i<s.size(); i++)
{
while(k!=-1&&s[k+1]!=s[i])
k=next[k];
if(s[k+1]==s[i])
k++;
next[i]=k;
}
//cout<<s.size()<<' '<<next[s.size()-1]<<endl;
if(s.size()%(s.size()-next[s.size()-1]-1)==0)
cout<<s.size()/(s.size()-next[s.size()-1]-1)<<endl;
else
cout<<1<<endl;
cin>>s;
}
}