KMP
文章平均质量分 68
sprite_
这个作者很懒,什么都没留下…
展开
-
poj3461 Oulipo(KMP)
题目链接:http://poj.org/problem?id=3461题目大意:给两个字符串p和s,问p在s中出现了几次。思路:KMP模板题。用KMP算法可以知道p是否在s 中出现,如果要知道出现几次,其实还是模拟匹配过程。如果匹配到一个成功的字符串,就继续看下去,同时j=next[j],相当于在第plen+1的地方字符串失配了,要重新给p定位。代码:#incl原创 2015-11-05 19:36:32 · 443 阅读 · 0 评论 -
POJ 2752 Seek the Name, Seek the Fame(KMP)
题目链接:http://poj.org/problem?id=2752题目大意:给一个字符串,求出他前缀和后缀相同时的他们的长度。思路:还是next数组的应用,先求整个字符串的next数组,然后可以知道next[len],代表着整个字符串的最大相同前缀和后缀长度x。然后看next[x],意思就是前x个字符的最大相同前缀和后缀长度,按照这样的方式一直循环,直到next[x]=原创 2015-11-06 16:02:14 · 477 阅读 · 3 评论 -
POJ 1961 Period(KMP)
题目链接:http://poj.org/problem?id=1961题目大意:跟前面那题一样,只是这题要求出这个字符串里面所有的能够组成a^n形式的情况。思路:还是应用next数组,对于各种情况可以暴力枚举len,选取符合情况的。代码:#include#include#include#includeusing namespace std;int min(原创 2015-11-06 16:40:25 · 318 阅读 · 0 评论 -
poj 2406 Power Strings(KMP)
题目链接:http://poj.org/problem?id=2406题目大意:给出一个字符串,这个字符串一定能够以a^n表示。现在问n最大为多少。思路:对于这个字符串来说,我可以算出他的next数组,然后能够得到这整个字符串的最大前缀和后缀相同的值next[len]。然后可以发现len-next[len]就是这个a的长度。所以就自己猜了一下= =如果len%(len-ne原创 2015-11-06 15:45:26 · 451 阅读 · 0 评论 -
hdu5510 (KMP+剪枝)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510题目大意:给n个字符串,求出最大的i使得对于第i个字符串,他的前i-1个字符串中至少有一个不是他的子串。思路:很容易想到利用KMP算法判断子串,但是直接操作是会超时的,所以我们加上一个剪枝:设立一个vis[i]数组,举个例子:如果1是3的子串,则令vis[1]=1,然后原创 2015-11-01 21:10:14 · 812 阅读 · 2 评论 -
KMP模板
//优化过后的next 数组求法 void GetNextval(char* p, int next[]) { memset(next,0,sizeof(next)); int pLen = strlen(p); next[0] = -1; int k = -1; int j = 0; while (j < pLen原创 2015-11-06 20:38:50 · 474 阅读 · 0 评论