KMP算法求字符串的最小循环节
2017-07-08 11:38
309 查看
题目链接(题目链接)
说到求字符串的最小循环节就不得不提及KMP算法因为要求循环节,还需要用到KMP算法的next数组
KMP算法本来是用来求一个串中是否包含另一个串,或者说一个串是否为另一个串的子串
下面有一个视频,很清晰的介绍了KMP算法
KMP算法详解,看不懂算我输
如果KMP算法理解其原理了,那么这道题也是非常简单的
用了KMP中的NEXT数组
结果直接是strlen(s)-NEXT【strlen(s)】
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; int nextnum[1000010]; int main() { string s; int step=1,n; while(cin>>s) { int len=s.size(); memset(nextnum,0,sizeof(0)); int i=0,j=1; while(j<len) //先写出next数组 { if(s[i]!=s[j]&&i!=0) { i=nextnum[i-1]; } else if(s[i]!=s[j]&&i==0) { nextnum[j]=0; j++; } else if(s[i]==s[j]) { nextnum[j]=i+1; j++,i++; } } int l=len-nextnum[len-1]; printf("%d ",l); for(int i=0; i<l; i++) { printf("%c",s[i]); } printf("\n"); } return 0; }
相关文章推荐
- HDU-1358 Period 字符串问题 KMP算法 求最小循环节
- UVA 10298 Power Strings 字符串的幂(KMP,最小循环节)
- D - Cyclic Nacklace HDU3746 (kmp 计算字符串最小循环节 )
- HDU 3746 字符串匹配(字符串的最小循环节问题)
- codeforces 825F F. String Compression dp+kmp找字符串的最小循环节
- POJ2406 字符串最小循环节
- HDU-3746 Cyclic Nacklace 字符串匹配 KMP算法 求最小循环节
- hdu1010 扩展KMP求字符串最小循环节
- POJ 2406 (字符串的匹配) 最小循环节问题
- 【字符串】【KMP模板--最小循环节总结】
- Uvalive - 3026 Period (kmp求字符串的最小循环节+最大重复次数)
- 【字符串入门专题1】D - Period hdu 1358【kmp-最小循环节简单应用】
- 杭电3746 kmp算法求字符串循环节
- (POJ1961)Period <KMP算法求最小循环节>
- poj 2406 KMP算法求字符串的最小周期
- 【kmp算法—最小循环节】Cyclic Nacklace HDU - 3746
- hdu5442-字符串循环节&最小表示法|后缀数组(未补)|kmp+最小-Favorite Donut
- poj1961 Period kmp解决找字符串的最小循环节
- poj 2406 Power Strings【字符串+最小循环节的个数】
- (POJ2406)Power Strings <KMP算法求最小循环节>