习题3-4 周期串(Periodic Strings, UVa455)
#include<stdio.h> #include<string.h> char s[100]; int main() { int T; scanf("%d",&T); while(T--) { scanf("%s",s); int t = 1; while(1) { int len = strlen(s),c = 0;; for(int i = 0;i < len;i++) { if(s[i] == s[(i + t)%len]) c++; } if(c == len) break; t++; } printf("%d\n",t); if(T != 0) printf("\n"); } return 0; }
(i + t)%len 的作用是防止i+t越界读到/0
原理是将输入的字符串看成环形串 如果i+t大于了len 就会从头开始 这样这个字符串就是一个环 而周期在环上是不变的

浙公网安备 33010602011771号