算出next数组.
对于任何一个循环字串,len-next[len]必为最小循环节长度
若len%(len-next[len])==0
即为循环字串,n=len/(len-next[len])
否则输出1
代码:
#include<cstdio> #include<cstring> using namespace std; const int N=1e6+10; char str[N]; int next[N],ans,len; void make() { int i=0,j=-1; next[i]=j; while(i<len) { if(j==-1||str[i]==str[j]) { i++; j++; next[i]=j; } else j=next[j]; } } int main() { while(~scanf("%s",str)) { if(str[0]==‘.‘) break; len=strlen(str); make(); int k=next[len]; if(!(len%(len-k))) printf("%d\n",len/(len-k)); else printf("1\n"); } return 0; }
原文地址:https://www.cnblogs.com/greengenius/p/9241362.html
时间: 2024-10-14 08:17:45