![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
KMP
JW_7066
这个作者很懒,什么都没留下…
展开
-
深入探讨KMP
KMP网上已经有很多资料了,详细的模拟过程,这里就不展开讲了。这篇文章主要是探讨如何构造next[]数组、复杂度的证明、KMP的缺陷以及该如何改进算法使得性能更优。一、KMP匹配代码int match (char* P, char* T) { int* next = buildNext(P); int n = (int) strlen(T), i = 0; int m = (int) strlen(P), j = 0; while ( j < m &原创 2020-07-22 09:36:08 · 1471 阅读 · 1 评论 -
poj 2406Power Strings(KMP入门)
题目链接:【poj 2406】输入一个字符串,问这个字符串是由几个最小子串拼接起来的,如abcd就是由abcd拼接,输出1,ababab就是由3个ab拼接的,输出3实际上就是求KMP里面自我匹配的失配数组#include #include #include #include #include using namespace std;const int inf=1e6+10;原创 2016-01-17 15:15:43 · 373 阅读 · 0 评论 -
HDU 2087 剪花布条(KMP入门模板题)
题目链接:【HDU 2087】输入两串字符串表示花布和小饰布,问花布可以由多少个小饰布组成KMP模板的简单应用#include #include #include #include #include using namespace std;char s[1010], p[1010];int f[1010], ls, lp;void find(){ memset(f,原创 2016-01-17 16:30:57 · 404 阅读 · 0 评论 -
hdu 1711 Number Sequence(KMP入门模板题)
题目链接:【hdu 1711】t组测试数据,每组包括长度为n的数列a以及长度为m的数列b,问数列b是否是数列a的子序列,如果是,输出最小的i使得a[i]=b[0],如果不是则输出-1优化后的KMP简单应用#include #include #include #include #include using namespace std;const int inf=1e6+10;原创 2016-01-17 19:03:17 · 502 阅读 · 0 评论 -
KMP最常用的模板
1、适用于前后缀的最大匹配P:abcdabcdabcd无F:0000012345678F[12] = 8,含义:前8个字符和后8个字符一样,且最小循环节长度是4char s[1010], p[1010];int f[1010];void getf(){ memset(f, 0, sizef(f)); int i=0, j=-1; f[0] = -1; while(原创 2016-01-17 19:10:36 · 358 阅读 · 0 评论 -
hdu 3336Count the string(KMP变形,求前缀出现的次数和)
题目链接:【hdu 3336】t组测试数据,输入长为n的字符串s[n](1例如:s[] = ababa前缀 次数a 3ab 2aba 2abab 1ababa 1====> 输出9先用KMP求出数组f[n],对于ababa,相应的f[n]原创 2016-01-19 22:56:07 · 651 阅读 · 0 评论