
ACM-字符串-KMP
GDUFE_SSS
这个作者很懒,什么都没留下…
展开
-
HDU1358:Period KMP跳转数组
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1358题意:给定长度的字符串,找出其循环子串,输出当前位置长度思路:运用定理即可,对初始化跳转数组的函数加一条判断语句,注意长度大于1AC代码:#include#include#includeusing namespace std;const int原创 2017-08-01 11:08:33 · 338 阅读 · 0 评论 -
HDU 2087 剪花布条 KMP算法
这道题用来加深KMP算法理解不错直接贴上代码:#include#include#includeusing namespace std;const int maxn=1000+50;int f [maxn];int ls,la;void getfill(char* s){ memset(f,0,sizeof(f)); for(int i=1;i<ls;i+原创 2017-07-31 10:02:27 · 391 阅读 · 0 评论 -
HDU1686:Oulipo KMP算法
KMP算法晦涩难懂,看了很多博客,了解了大致原理:首先KMP算法是一个字符串匹配算法,对一个字符串,查找是否存在模式串,区别于传统匹配算法,KMP算法通过对模式串进行预处理,获得一个next数组,通过next数组的跳转实现快速匹配。next数组原理:next数组通过对模式串 “拆解” 获得,对于一个模式串,通过遍历模式串,查找是否存在相同子串#include#includ原创 2017-07-31 09:43:24 · 644 阅读 · 0 评论 -
POJ 2406 Power Strings KMP算法
明显的KMP算法题这里给出一个定理:假设S的长度为len,则S存在循环子串,当且仅当,len可以被len - next[len]整除,最短循环子串为S[len - next[len]]AC代码:#include#include#includeusing namespace std;const int maxn=1000000+50;int f [max原创 2017-07-31 10:20:52 · 359 阅读 · 0 评论 -
KMP算法心得总结
KMP算法精髓在于next数组上:1.next[]数组的定义。对于字符串s的第i个字符s[i],next[i]定义为字符s[i]前面最多有多少个连续的字符和字符串s从初始位置开始的字符匹配 。因此,对next数组实行逆序跳转输出,可得到 POJ-Seek the Name, Seek the Fame 此题答案2.S的长度为len,S存在循环子串,当且仅当,len可以被len - ne原创 2017-08-01 15:44:42 · 999 阅读 · 0 评论