1 /* 2 * kmp 3 */ 4 5 #include <cstdio> 6 #include <cstring> 7 #include <iostream> 8 9 using namespace std; 10 11 const int N = 100005; 12 13 int next[N]; 14 char pat[N]; 15 16 void indexNext() { 17 int k = 0; 18 next[1] = 0; 19 for (int i=2; pat[i]; ++i) { 20 while (k && pat[k+1]!=pat[i]) k = next[k]; 21 if (pat[k+1] == pat[i]) ++k; 22 next[i] = k; 23 } 24 } 25 26 int solve() { 27 indexNext(); 28 int len = strlen(pat); 29 if ((len-1)%(len-next[len-1]-1)==0) {//串是周期的 30 if (next[len-1]) return 0;//周期数大于1 31 else return len - 1;//周期数等于1 32 } 33 else return (len-next[len-1]-1)-(len-1)%(len-next[len-1]-1);//串是非周期的,最短周期长度减去不完整周期的长度 34 } 35 36 int main() { 37 int t; 38 scanf ("%d", &t); 39 pat[0] = '#'; 40 while (t--) { 41 scanf ("%s", pat+1); 42 printf ("%d\n", solve()); 43 } 44 return 0; 45 }