KMP查询算法的匹配串的前缀后缀相同的最大长度

一、KMP算法的作用

查询复杂度是O(n+m),其中n是主字符串长度,m是匹配串的长度。

二、字符串的前缀和后缀

(一)前缀

指的是字符串从第1个字符串开始,每次截取连续字符串的操作。

例如字符串"ABC"的前缀有下列情况:

"A"、"AB"、"ABC"。

(二)后缀

指的是从第1个字符开始,每次截取连续字符串到最后1个字符的操作。

例如字符串"ABC"的后缀有下列情况:

"ABC"、"BC"、"C"。

三、匹配串的前缀和后缀相同

简单的说:就是把前缀和后缀拿来比较,有相同的就记录前缀或者后缀的长度。

案例(避免选择整个字符串为前缀和后缀):

以匹配串"ABAB" 为例:

比较1个字符:前缀"A"和后缀"B"不相同。

比较2个字符:前缀"AB"和后缀"AB"相同,记录前缀长度是2个字符。

比较3个字符:前缀"ABA"和后缀"BAB"不相同。

四、KMP比较的思路

(一)预处理,求得匹配串每个字符前面的前缀和后缀相同的最长长度。

默认值是0,也就是从匹配串的第1个字符开始比较。

(二)按顺序从第1个位置比较主串和匹配串的对应字符

1、如果对应位置的字符相同,去下一个位置比较。

2、如果比较到匹配串的末尾,代表匹配成功。

3、如果对应字符不相等,就把匹配串跳转到前缀后缀相同的长度,继续比较。

总之,前面有比较过并且相同的,就不需要从头开始比较了。

相关推荐
夜不会漫长8 小时前
C++:红黑树
数据结构·算法
冻柠檬飞冰走茶10 小时前
PTA刷题集之Airline Routes(C语言实现)
c语言·开发语言·数据结构·算法
736c11 小时前
固件开发岗算法
数据结构·算法
冻柠檬飞冰走茶11 小时前
PTA刷题集之Battle Over Cities - Hard Version(C语言实现)
c语言·开发语言·数据结构·算法
PaperAccept16 小时前
【研知有术论文发表】材料科学一区期刊,影响因子30+的纳米科技SCI,审稿严格但有效率
大数据·数据结构·科技·量子计算
Tairitsu_H16 小时前
[C++高阶数据结构·图论下] 最短路径:为什么“挑最小的”一定正确?
数据结构·c++·图论
Tairitsu_H18 小时前
[C++高阶数据结构·图论上] 最小生成树:为什么“选边”和“选点”是两条路?
数据结构·c++·图论·最小生成树
D e re k ZH1 天前
C++ 并发、未定义行为与工程化难点(No 3)
数据结构·c++·算法·面试
La Pulga1 天前
【FreeRTOS源码学习笔记】链表的实现
数据结构·笔记·stm32·mcu·链表·嵌入式·freertos
番茄味城市甜菜2 天前
数据结构:双向链表实现,链表与顺序表的对比
数据结构·链表