标签:
给一个字符串。求这个串的最小的循环节的长度。
好像。num = len/(len-next[len]) 就是循环节的长度。如果 len%(len-next[len]) ==0 就是 说字符串长度刚好是循环节长度的整数倍。不然的话。说明没有最小循环节。
证明嘛。这里好像还是蛮靠谱的。http://blog.csdn.net/euler_m/article/details/6281903
但是。。还是没有看懂。。~~~~(>_<)~~~~暂且记住吧,,
附代码;
1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 using namespace std; 5 6 #define maxn 1000010 7 8 int next[maxn]; 9 char str[maxn]; 10 int ans[maxn]; 11 12 void getNext(char str[]) { 13 int len=strlen(str+1); 14 next[1] = 0; 15 for (int k=0, q=2; q<=len; ++q) { 16 while(k>0 && str[k+1] != str[q]) 17 k=next[k]; 18 if (str[k+1] == str[q]) 19 k++; 20 next[q] = k; 21 } 22 } 23 24 int main() 25 { 26 while(scanf("%s",str+1)!= EOF) 27 { 28 if (str[1] == ‘.‘) break; 29 int len = strlen(str+1); 30 getNext(str); 31 int flag = len % (len - next[len]); 32 if (flag != 0) printf("1\n"); 33 else { 34 int num = len / (len - next[len]); 35 printf("%d\n", num); 36 } 37 } 38 return 0; 39 }
标签:
原文地址:http://www.cnblogs.com/icode-girl/p/4857224.html