码迷,mamicode.com
首页 >  
搜索关键字:kmp    ( 3157个结果
HDU 1358 Period (KMP)
这道题对更加深入地理解next数组有很大帮助。 基本思路: 字符编号从0开始,那么if(i%(i-next[i])==0),则i前面的串为一个轮回串,其中轮回子串出现i/(i-next[i])次。 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1358...
分类:其他好文   时间:2014-08-06 15:01:01    阅读次数:190
poj2406 Power Strings (KMP)
这题跟HDU 1358 Period (KMP) 差不多,稍微修改代码就行了。 关于KMP的更多知识,请关注从头到尾彻底理解KMP(2014年8月4日版) 。 #include #include int n,next[1000000]; char p[1000000]; void getnext() { int k=0,j=1; next[0]=-1;next[1]=0; ...
分类:其他好文   时间:2014-08-06 14:48:01    阅读次数:204
HDU 1618 Oulipo KMP题解
给出两个字符串,寻找一个字符串在另外一个字符串出现的频率。 原来kmp还有一个陷阱,下面注释出了,下标没步进好,就有一定几率出现超时的,也有一定几率出现错误,视具体的串而定。 修改一下就好了,kmp速度是很快的。 #include #include const int MAX_TXT = 1000001; const int MAX_WORD = 10001; int ...
分类:其他好文   时间:2014-08-06 01:59:00    阅读次数:195
HDU 1711 Number Sequence KMP题解
KMP查找整数数列,不是查找字符串。 原理是一样的,不过把字符串转换为数列,其他基本上是一样的。 #include #include const int MAX_N = 1000001; const int MAX_M = 10001; int strN[MAX_N], strM[MAX_M], next[MAX_M], N, M; void getNext() { mems...
分类:其他好文   时间:2014-08-05 22:37:10    阅读次数:194
KMP模板
KMP算法是快速字符串匹配算法,朴素的暴力算法的时间复杂度为O(n*m),而KMP通过对模式串进行相应的处理,能够达到O(m+n)的速度。 我们知道在字符串匹配的时候最消耗时间的就是当匹配到第 i 个位置发现不匹配时,下一次又对模式串进行一次重新匹配,那么假如模式串中有很多相同的字母的话,这样做了很多重复的事情,那么我可以对模式串进行一定的处理,处理处一个对应的数组,让他保存假如这里不匹配是我下...
分类:其他好文   时间:2014-08-05 09:37:19    阅读次数:172
字符串匹配算法
今天一天鼓捣了两种字符串匹配的算法,KMP算法和BM算法,说实话,BM算法还是第一次听说,以前只知道BM算法的说,总之一句话,要学习的还是很多的,看了BM算法,只能感叹作者的高大上了。看了好几篇文章,终于算是把BM算法实现了,并且调试运行成功了,把这学习的经过记录下来,聊表纪念。 1 #inclu....
分类:其他好文   时间:2014-08-05 00:08:18    阅读次数:314
poj 2406 Power Strings KMP匹配
对于数组s[0~n-1],计算next[0~n](多计算一位)。 考虑next[n],假设t=n-next[n],如果n%t==0,则t就是问题的解,否则解为1。 这样考虑: 比如字符串"abababab",             a  b a b a b a b * next     -1 0 1 2 3 4 5 6  7 考虑这样的模式匹配,将"ababa...
分类:其他好文   时间:2014-08-04 21:38:08    阅读次数:294
poj 2752 Seek the Name, Seek the Fame KMP
对于KMP算法中next函数的应用 题意是对于一个字符串的前缀和后缀比较是否相等,再把相等的可能按字符串长度进行输出 #include #include #include using namespace std; int len; int next[1000005]; char s[1000005]; int kmp_next() {     int i=0,j=-1; ...
分类:其他好文   时间:2014-08-04 21:32:38    阅读次数:239
hdu 2594 Simpsons’ Hidden Talents
题意是求第一个字符的前缀和后一个字符串的后缀最大的公共序列,并输出。。。 将两个字符串合并,求出kmp中的next数组就行,但要注意不要大于某个字符串的长度; #include #include const int N = 50005; #define min(a,b) ((a) char s1[N], s2[N], s3[N * 2]; int next[N * 2];...
分类:其他好文   时间:2014-08-04 17:36:47    阅读次数:207
hdu 1686 Oulipo (kmp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1686题目大意:寻找子链在母链中出现的次数。 1 #include 2 #include 3 #include 4 using namespace std; 5 int next[10010],su...
分类:其他好文   时间:2014-08-04 17:33:17    阅读次数:210
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!