题意
求最大的循环节
代码
如果是循环的,也就是S=TTTTT
那么ne[i]=TTTT,所以也就是前面的那一段长度。
如果不相同,也就是abc,那么%的话,一定时为0的,妙
代码
#include <bits/stdc++.h>
using namespace std;
const int M=1e6+5;
int ne[M];
char s[M];
void init(char *s) {
int len=strlen(s+1);
for(int i=2,j=0;i<=len;i++) {
while(j&&s[i]!=s[j+1])j=ne[i];
if(s[i]==s[j+1])j++;
ne[i]=j;
}
}
int main() {
while(scanf("%s",s+1)!=-1) {
init(s);
int len=strlen(s+1);
if(len%(len-ne[len])==0)cout<<len/(len-ne[len])<<'\n';
else cout<<"1\n";
}
return 0;
}
//但是循环节是不能重叠的
标签:Power,int,代码,ne,char,Strings
From: https://www.cnblogs.com/basicecho/p/17047877.html