KMP 求最小循环节,power string

系统管理员 2023-10-10 08:25 89阅读 0赞
  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. using namespace std;
  5. const int M=1e6+10;
  6. char s[M];
  7. int n,nex[M];
  8. void getnext()
  9. {
  10. int k=-1,j=0;
  11. nex[0]=-1;
  12. while(j<n)
  13. if(k==-1||s[j]==s[k]) nex[++j]=++k;
  14. else k=nex[k];
  15. }
  16. int main(){
  17. while(~scanf("%s",s)){
  18. if(s[0]=='.')break;
  19. n=strlen(s);
  20. getnext();
  21. int k=n-nex[n];
  22. if(n%k==0)printf("%d\n",n/k);
  23. else puts("1");
  24. }
  25. return 0;
  26. }

发表评论

表情:
评论列表 (有 0 条评论,89人围观)

还没有评论,来说两句吧...

相关阅读