思路:先用kmp求出nxt数组,当n%(n-nxt[n])==0时,n/(n-nxt[n])就是答案。
代码:
#include<cstring>
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
#define maxn 1000000
string s;
int n;
int nxt[maxn+5]= {0};
void make_nxt() {
nxt[0]=-1;
for(int i=0; i<n; i++) {
int j=nxt[i];
while(s[j]!=s[i]&&j>=0) j=nxt[j];
nxt[i+1]=j+1;
}
for(int i=0; i<n; i++) nxt[i]=nxt[i+1];
}
int main() {
while(true) {
cin>>s;
if(s[0]=='.') break;
n=s.size();
make_nxt();
if(n%(n-nxt[n])==0) printf("%d\n",n/(n-nxt[n]));
else printf("1\n");
}
return 0;
}