一:在介绍KMP算法之前,先介绍一下BF算法
(1)BF算法(传统的匹配算法,也是最简单的算法)
BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。
(2)举例说明:
S: abab...
分类:
编程语言 时间:
2014-10-24 13:04:34
阅读次数:
188
思路:extend[i]表示原串以第i开始与模式串的前缀的最长匹配。经过O(n)的枚举,我们可以得到,若extend[i]+i=len且i>=extend[i]时,表示t即为该点之前的串,c即为该点之前的str串,最后输出即可。
#include
#include
#include
#include
using namespace std;
const int N=100010;
ch...
分类:
其他好文 时间:
2014-10-21 23:18:18
阅读次数:
267
1、KMP算法KMP算法程序看起来比较简单,但是求next数组的过程还是比较难理解,next数组实质就是求最大的前后缀,该算法的复杂度是O(m+n),算法流程如下:假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置如果j = -1,或者当前字符匹配成功(即S[i] == P[j]),都令i+...
分类:
编程语言 时间:
2014-10-21 21:21:30
阅读次数:
254
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3065题目大意:多个模式串,范围是大写字母。匹配串的字符范围是(0~127)。问匹配串中含有哪几种模式串,且每种模式串出现了多少次。解题思路:AC自动机模板题。模式串的范围是大写字母,但是匹配串的范围却是...
分类:
其他好文 时间:
2014-10-21 17:28:56
阅读次数:
217
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2896题目大意:多个模式串。多个匹配串。其中串的字符范围是(0~127)。问匹配串中含有哪几个模式串。解题思路:AC自动机模板题。注意一下字符范围。cnt记录这个模式串的个数改为这个模式串的index。f...
分类:
其他好文 时间:
2014-10-21 17:21:47
阅读次数:
197
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2222题目大意:多个模式串。问匹配串中含有多少个模式串。注意模式串有重复,所以要累计重复结果。解题思路:AC自动机模板题。一开始使用LRJ的坑爹静态模板,不支持重复的模式串。在做AC自动机+DP的时候,扒...
分类:
其他好文 时间:
2014-10-21 02:11:22
阅读次数:
242
前言虽从事企业应用的设计与开发,闲暇之时,还是偶尔涉猎数学和算法的东西,本篇根据个人角度来写一点关于KMP串匹配的东西,一方面向伟人致敬,另一方面也是练练手,头脑风暴背景目标串: T(1…..n)模式串: P(1…..m)输出:搜索P在T中的位置 s,令 T(s…s+m-1) === P(1…m)例...
分类:
编程语言 时间:
2014-10-20 23:13:12
阅读次数:
176
KMP算法
BF算法
BF算法就是我们最基本的求解字符串匹配的算法,算法的时间复杂度为O(M*N),空间复杂度为O(1),具体过程如下:
串
第一次
第二次
第三次
第四次
模式串S[i]
abcababc
abcababc
abcababc
abcababc
匹配串T[j]
...
分类:
编程语言 时间:
2014-10-20 17:26:30
阅读次数:
233
BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。 1 //BF算法 2 #include 3 4 usin.....
分类:
编程语言 时间:
2014-10-13 22:45:47
阅读次数:
190