一:在介绍KMP算法之前,先介绍一下BF算法
(1)BF算法(传统的匹配算法,也是最简单的算法)
BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。
(2)举例说明:
S: abab...
分类:
编程语言 时间:
2014-10-24 13:04:34
阅读次数:
188
作者:July。出处:http://blog.csdn.net/v_JULY_v/。引记 此前一天,一位MS的朋友邀我一起去与他讨论高速排序,红黑树,字典树,B树、后缀树,包含KMP算法,只有在解说KMP算法的时候,言语磕磕碰碰,我想,原因有二:1、博客内的东西不常回想,忘了不少;2、便是我对KMP...
分类:
编程语言 时间:
2014-10-23 22:15:38
阅读次数:
302
/***字符串匹配算法***/
#include
#include
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
#define MAXSTRLEN 255 //用户可在255以内定义最长串长
typedef char SString[MAXSTRLEN+...
分类:
编程语言 时间:
2014-10-23 12:27:09
阅读次数:
161
A + B for you againTime Limit: 5000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4496Accepted Submission(s): 115...
分类:
编程语言 时间:
2014-10-22 17:19:02
阅读次数:
148
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
字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K...
分类:
编程语言 时间:
2014-10-21 19:08:29
阅读次数:
198
题目大意:给出一个字符串,已知它是一个字符串S不断重复后构成的无限长的字符串的一个子串,求S的最短长度是多少。
思路:利用KMP算法,答案就是n-next[n].证明如下:
图太渣了。。。
还有一种情况就是next[n]
总之就是原串可以被划分成S的后缀和若干段S,因此是合法答案;而KMP保证Next[n]尽量大,因此n-next[n]是最小答案。
代码:
#i...
分类:
其他好文 时间:
2014-10-21 17:46:55
阅读次数:
197
#include
#include
#include
using namespace std;
char s1[101],s2[21];
int next[105],cont;
void getnext(char s[])
{
int j=-1,i=0,len;
next[0]=-1;
len=strlen(s);
while(i<len)
{
if(j==-1||s[i]==s[j...
分类:
其他好文 时间:
2014-10-21 12:16:36
阅读次数:
192
#include
#include
#include
#define N 1000005
int next[N];
char s[N];
using namespace std;
void getnext(char s[])
{
int j=-1,i=0,len;
next[0]=-1;
len=strlen(s);
while(i<=len)
{
if(j==-1||s[i]...
分类:
其他好文 时间:
2014-10-21 01:06:37
阅读次数:
235
前言虽从事企业应用的设计与开发,闲暇之时,还是偶尔涉猎数学和算法的东西,本篇根据个人角度来写一点关于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