POJ 2406 KMP
2016-06-17 14:23
211 查看
题目大意:
给一个串,由n个连续的重复子串构成,输出n。以句号停止输入。
理解:
用KMP的next数组求解,next数组记录的是前面的串前缀和后缀相同的最大长度。n与next【len】有关。
给一个串,由n个连续的重复子串构成,输出n。以句号停止输入。
理解:
用KMP的next数组求解,next数组记录的是前面的串前缀和后缀相同的最大长度。n与next【len】有关。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int MAXN=1e6+5; int next[MAXN]; char s[MAXN]; void get_next(char* s){ int len=strlen(s); int i=0,j=-1; next[0]=-1; while(i<len){ if(j==-1||s[i]==s[j]){ i++; j++; next[i]=j; } else { j=next[j]; } } } int main() { while(~scanf("%s",s)){ if(strcmp(s,".")==0)break; get_next(s); int len=strlen(s); if(len%(len-next[len])==0){ printf("%d\n",len/(len-next[len])); } else { printf("1\n"); } } return 0; }
相关文章推荐
- KMP算法的C#实现方法
- JavaScript中数据结构与算法(五):经典KMP算法
- 字符串算法--KMP--Java实现
- 初学ACM - 组合数学基础题目PKU 1833
- KMP算法(转载)
- kmp算法实现
- POJ ACM 1001
- POJ ACM 1002
- 1611:The Suspects
- POJ1089 区间合并
- KMP算法详解
- linux kernel data struct: KMP算法实现
- POJ 2159 Ancient Cipher
- POJ 2635 The Embarrassed Cryptographe
- POJ 3292 Semi-prime H-numbers
- POJ 2773 HAPPY 2006
- POJ 3090 Visible Lattice Points
- POJ-2409-Let it Bead&&NYOJ-280-LK的项链
- POJ-1695-Magazine Delivery-dp
- POJ1523 SPF dfs