poj 2406
Posted 一个_小菜鸟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 2406相关的知识,希望对你有一定的参考价值。
http://poj.org/problem?id=2406
题意:给你一个字符串,要你找到它是最多是由它多少个子串构成的
思路:如果这个字符串可以由它的子串构成,那么它的next[len]的这个值与len肯定是倍数关系,len-next[len]就是等于子串的长度
1 #include <stdio.h> 2 #include <string.h> 3 const int maxn = 1e6+25; 4 5 char str[maxn]; 6 int next[maxn]; 7 8 9 void getnext() 10 { 11 int len = strlen(str); 12 int i = 0,j = -1; 13 next[0] = -1; 14 while(i<len) 15 { 16 if(j==-1||str[i]==str[j]) 17 next[++i] = ++j; 18 else 19 j = next[j]; 20 } 21 } 22 23 int main() 24 { 25 while(scanf("%s",str),str[0]!=‘.‘) 26 { 27 memset(next,0,sizeof(next)); 28 getnext(); 29 int ans = 1; 30 int len = strlen(str); 31 if(len%(len-next[len])!=0) 32 printf("1\n"); 33 else 34 printf("%d\n",len/(len-next[len])); 35 } 36 return 0; 37 }
以上是关于poj 2406的主要内容,如果未能解决你的问题,请参考以下文章
POJ - 2406 ~SPOJ - REPEATS~POJ - 3693 后缀数组求解重复字串问题
poj2406(求字符串的周期,kmp算法next数组的应用)