Power Strings

Power Strings

题意

求最大的循环节

代码

如果是循环的,也就是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;
}
//但是循环节是不能重叠的
posted @ 2023-01-12 20:36  basicecho  阅读(33)  评论(0)    收藏  举报