狍子也能懂的做题特化型KMP

总忘,很痛苦!简单总结一下步骤呃呃呃呃呃呃

求next数组

以字符串abaabc为例。
①虽然不知道发生了什么总之我先填个-10在这里

a b a a b c
-1 0

②这时已有字符串ab,没有重复的前后缀,于是再写个0

a b a a b c
-1 0 0

③已有字符串aba,最长相等前后缀a长度是1,写个1

a b a a b c
-1 0 0 1

④已有字符串abaa,最长相等前后缀依旧为a,还是1

a b a a b c
-1 0 0 1 1

⑤已有字符串abaab,最长相等前后缀ab,写2
([a,b];[ab,ab];[aba,aab];[abaa,baab])

a b a a b c
-1 0 0 1 1 2

⑥你拥有了一个next数组(视情况给每项+1)!神奇吧!

字符串匹配

以主串Taabaabaabaac和模式串saabaac为例。
①按照之前的方法求出aabaac的next数组

a a b a a c
-1 0 1 0 1 2

②第一个不匹配的字符c对应的next数组中数值为2

a a b a a \color{red}{b} a a b a a c
a a b a a \color{red}{c}

所以将s[2](即字符串s的第三位)和出错的那一位对齐,再次比较

a a b a a {b} a a \color{red}{b} a a c
a a {b} a a \color{red}{c}

再次对齐

a a b a a b a a {b} a a c
a a {b} a a c

③成功了耶!信积拉奶!(

拓展&总结

做题特化(指不管原理只管答案)
想要原理的话可以看看如何更好地理解和掌握 KMP 算法? - 知乎
over,希望能帮助到现实主义者的你!(

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • kmp算法详解(以下标为0开始的字符串举例) 什么是KMP算法呢? Knuth-Morris-Pratt 字符串查...
    fujiaxu阅读 4,237评论 0 2
  • next数组两种求法 一、求法的文字描述 (1)第一种求法:根据前一个字符的next值求字符串记作 p;next ...
    亚欧沙龙阅读 30,307评论 3 8
  • 概述:本文主要在代码层面上分析KMP的实现过程,如果您还不了解KMP的推导过程,请参考KMP(一) 模式匹配算法推...
    hehtao阅读 7,188评论 1 4
  • next和nextval求解方法 next数组求解过程:首先确定next数组的前两位一定是0和1,然后从j = 3...
    爷爷的心里只有奶奶阅读 1,423评论 0 0
  • 一:什么是KMP算法? KMP诞生背景: KMP(Knuth-Morris-Pratt)三位大佬联名提出,故以他们...
    愤怒的谜团阅读 5,613评论 0 2