数据结构与算法——字符串匹配问题(KMP算法)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法——字符串匹配问题(KMP算法)相关的知识,希望对你有一定的参考价值。

参考技术A

KMP算法也是比较著名的模式匹配算法。是由 D.E.Knuth,J.H.Morrs VR.Pratt 发表的一个模式匹配算法。可以大大避免重复遍历的情况。

如果使用暴风算法的话,前面五个字母完全相等,直到第六个字母 "f" "x" 不相等。如下图:

T = “abcdex”
j 123456
模式串 abcdex
next[j] 011111

T = "abcabx"
j 123456
模式串T abcabx
next[j] 011123

T = "ababaaaba"
j———————123456789
模式串T——— ababaaaba
next[j]————011234223

T = "aaaaaaaab"
j———————123456789
模式串T——— aaaaaaaab
next[j]————012345678

next数组其实就是求解字符串要回溯的位置
假设,主串S= “abcababca”;模式串T=“abcdex”,由以上分析得出next数组为011111,next数组意味着当主串与模式串不匹配时,都需要从第一个的位置重新比较。

KMP算法也是有缺陷的,比如主串S=“aaaabcde”,模式串T= “aaaaax”。next的数组就是012345;

当开始匹配时,当i= 5,j = 5时,我们发现字符"b"与字符“a”不相等,如上图,j = next[5] = 4;

由于T串的第二、三、四、五位置的字符都与首位“a”相等,那么可以用首位next[1]的值去取代与它相等的后续字符的next[j],那么next数组为0,0,0,0,0,5;

在求解nextVal数组的5种情况

以上是关于数据结构与算法——字符串匹配问题(KMP算法)的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法 字符串匹配的KMP算法

数据结构关于串的KMP算法的理解高手请进

KMP--字符串匹配

字符串匹配与KMP算法笔记

数据结构开发(14):KMP 子串查找算法

字符串与模式匹配算法:KMP算法