码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 2406 KMP 循环节

时间:2015-10-06 16:40:32      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

给一个字符串。求这个串的最小的循环节的长度。

好像。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 }
View Code

 

POJ 2406 KMP 循环节

标签:

原文地址:http://www.cnblogs.com/icode-girl/p/4857224.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!