kmp个人理解

对于kmp,很多小伙伴就被next数组打败了,今天咱们就来好好聊聊next数组,因为只要next数组搞懂了,匹配串和主串也是一样的道理,只不过求next数组的时候是自己和自己匹配。

对于next数组的前两位都是固定的,第一位和第二位既可以用为0和1,也可以为-1和0,我这边习惯为0和1。

到了后面的时候,就是求匹配串本身的最大前缀和最大后缀的值

比如字符串ababcabcacbab,直接从前三个开始

aba的前缀{a,ab},后缀{a,ba},所以next[3] = 1;

abab的前缀{a,ab,aba},后缀{b,ab,bab},所以next[4] = 2;

ababc的前缀{a,ab,aba,abab},后缀{c,bc,abc,babc},所以next[5] = 1;

ababca的前缀{a,ab,aba,abab,ababc},后缀{a,ca,bca,abca,babca},所以next[6] = 1;

ababcab的前缀{a,ab,aba,abab,ababc,ababca},后缀{b,ab,cab,bcab,abcab,babcab},所以next[7]=2

以此类推,如果匹配的过程中失败的话,就跳到next数组对应的位置上,这就是j = next[j]

相关推荐
乐分启航13 小时前
【无标题】
深度学习·算法·目标检测·transformer·迁移学习
liu****13 小时前
linux上git推送内容到gitee上
c++·git·gitee·版本控制
GfovikS0610013 小时前
C++中的函数式编程
开发语言·c++·算法
2401_8579182913 小时前
C++中的构建器模式
开发语言·c++·算法
liu****14 小时前
6.多人协作(同一分支下(不常用))(一)
c++·gitee·版本控制
穿条秋裤到处跑14 小时前
每日一道leetcode(2026.03.25):等和矩阵分割 I
算法·leetcode·矩阵
齐鲁大虾14 小时前
VC++ 如何获取打印机的脱机/连接状态
开发语言·c++·获取打印机状态
实心儿儿14 小时前
算法9:相同的树
算法·leetcode·职场和发展
羊小猪~~14 小时前
【QT】--QWIdget与QDialog
开发语言·数据库·c++·后端·qt·求职招聘
Zarek枫煜14 小时前
zig与c3的算法 -- 静态队列
开发语言·stm32·单片机·嵌入式硬件·算法·51单片机