KMP算法

傷城~ 2021-12-15 07:19 421阅读 0赞

KMP算法的思想是

主串S 和模式串W,判断W是否匹配S

如果主串S在i位置与W串在j位置出现不匹配的情况的时候,利用已经得到的匹配把W串尽量右移动一段距离。

用伪代码写,如下:

int kmp(string S, string W){

while(i<S.length){

if(S[i]==W[j]) {

if(j==W.length-1) return i-j;

i++; j++;

} else {

if(next[j]>-1){

j=next[j];

} else {

i=i-j+1;

j=0;

}

}

这里我们一般记next[0]=-1;

next[1]=0

当j>=2时,

找到最大的k,使得

W[0]~W[k-1] == W[j-k]~W[j-1],

然后赋值next[j]=k

转载于:https://www.cnblogs.com/gaoqichao/archive/2012/10/30/2747242.html

发表评论

表情:
评论列表 (有 0 条评论,421人围观)

还没有评论,来说两句吧...

相关阅读

    相关 KMP算法

    1.原始的字符串匹配方法 算法基本思想:从主串S的第pos个字符起和模式的第一个字符比较之,若相等,则继续逐个比较后续字符;否则从主串的下一个字符起再重新和模式的字符比较

    相关 KMP算法

    kmp算法又称“看毛片”算法,是一个效率非常高的字符串匹配算法。不过由于其难以理解,所以在很长的一段时间内一直没有搞懂。虽然网上有很多资料,但是鲜见好的博客能简单明了地将其讲清

    相关 KMP算法

    1. KMP算法 1.1 定义     Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现

    相关 KMP算法

    核心:1.当遇到不可匹配的字符的时候,我们希望找到一些规律,可以将搜索串往后多滑动几位    2.构建《部分匹配表》 下面链接是阮大神的见解,写的非常棒!    [字符串

    相关 Kmp算法

    举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? ![bg2013050101.jpg][]

    相关 KMP算法

    KMP算法的思想是 主串S 和模式串W,判断W是否匹配S 如果主串S在i位置与W串在j位置出现不匹配的情况的时候,利用已经得到的匹配把W串尽量右移动一段距离。 用伪代码写

    相关 KMP算法

    一 KMP算法介绍 1 KMP是一个解决模式串在文本串是否出现过,如果出现过,求算出现的位置的经典算法。 2 Knuth-Morris-Pratt 字符串查找算法,简称