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;
}
//但是循环节是不能重叠的

原文链接: https://www.cnblogs.com/basicecho/p/17047877.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    Power Strings

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/311493

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 下午12:00
下一篇 2023年2月16日 下午12:01

相关推荐