这几天折腾了下KMP,终于算是理解了其中的原理。现在这里大概记录下,以备不时之需!! char str[MAXN]; //原串 char p[MAXN]; //需要在原串中寻找的字符串相对于一般的字符串匹配,KMP算法优化的地方就在于 当发现当前匹配的位置 k + 1 匹配失败时...
分类:
编程语言 时间:
2015-04-02 14:39:39
阅读次数:
173
KMP第二题,如果对KMP理解了的话,这道题应该想一下就能想出来
#include
#include
using namespace std;
char s[400005];
int next[400005];
int a[400005];
//next数组范围为1-n,next[0]是不使用的
void get_next(int n){
if(n==0) return;
int...
分类:
其他好文 时间:
2015-03-28 13:04:08
阅读次数:
149
1. 引言 在一个大的字符串中对一个小的子串进行定位称为字符串的模式匹配,这应该算是字符串中最重要的一个操作之一了。KMP本身不复杂,但网上绝大部分的文章把它讲混乱了。下面,咱们从暴力匹配算法讲起,随后阐述KMP的流程步骤、next 数组的简单求解、递推原理、代码求解,接着基于next 数组匹配,谈...
分类:
编程语言 时间:
2015-03-19 21:39:24
阅读次数:
203
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3336分析:求字符串中所有前缀的匹配次数,先求出next数组,从n->1开始枚举计数。/*Count the stringTime Limit: 2000/1000 MS (Java/Others) .....
分类:
其他好文 时间:
2015-03-18 17:48:12
阅读次数:
146
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2594分析:判断是否在两串中存在子串,能作为s1的前缀 && s2的后缀。可以考虑将两串合并,然后直接利用next数组。合并后可能会出现的状况是,所求子串大于s1 || s2的长度,所以还要进行一次判断。...
分类:
其他好文 时间:
2015-03-18 08:56:12
阅读次数:
149
MP 是 KMP 的简单版本,目前以下题目都是MP算法KMP的原理就不多说了http://kb.cnblogs.com/page/176818/(这个模板起始的next数组值为0,不是-1,在模板中,next数组叫f数组)#include #include #include #define maxn...
分类:
其他好文 时间:
2015-03-13 00:01:52
阅读次数:
353
分析转自:http://972169909-qq-com.iteye.com/blog/1114968十分易懂题意:求字串中【前缀+跟前缀相同的子串】的个数? Sample Input14abab Sample Output6abab:包括2个a,2个ab,1个aba,1个abab这里要用到next...
分类:
编程语言 时间:
2015-03-12 11:26:05
阅读次数:
111
KMP的next数组,对于next[i],是:1~i-1的最长的匹配的前缀和后缀的长度(也即在i位置匹配失败后,应该跳到的模式串的位置)然后我们将所有满足要求的字串按照它的末尾位置分类。 1 #include 2 #include 3 #define M 10007 4 #define maxn.....
分类:
其他好文 时间:
2015-03-10 22:53:58
阅读次数:
216
之前说到,朴素的匹配,每趟比较,都要回溯主串的指针,费事。则 KMP 就是对朴素匹配的一种改进。正好复习一下。KMP 算法其改进思想在于:每当一趟匹配过程中出现字符比较不相等时,不需要回溯主串的 i指针,而是利用已经得到的“部分匹配”的结果将模式子串向右“滑动”尽可能远的一段距离后,继续进行比较。如...
分类:
编程语言 时间:
2015-03-10 06:47:58
阅读次数:
9603
转载请注明来源,并包含相关链接。网上有很多讲解KMP算法的博客,我就不浪费时间再写一份了。直接推荐一个当初我入门时看的博客吧: http://www.cnblogs.com/yjiyjige/p/3263858.html 这位同学用详细的图文模式讲解了KMP算法,非常适合入门。 ----------...
分类:
编程语言 时间:
2015-03-05 22:16:21
阅读次数:
190