kmp个人理解

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

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

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

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

aba的前缀{a,ab},后缀{a,ba},所以next3 = 1;

abab的前缀{a,ab,aba},后缀{b,ab,bab},所以next4 = 2;

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

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

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

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

相关推荐
小poop几秒前
深入理解指针(中):数组与指针的进阶之旅
c++
YikNjy4 分钟前
break和continue
java·开发语言·算法
春日见6 分钟前
五分钟入门 强化学习---DQN(Deep Q Net)算法与实现
人工智能·python·深度学习·算法·microsoft·机器学习
budingxiaomoli33 分钟前
动态规划--斐波那契数列模型
算法·动态规划
IT猿手37 分钟前
多目标优化算法:多目标蛇优化算法(Multiple Objective Snake Optimizer,MOSO)(提供MATLAB代码)
开发语言·算法·matlab·动态路径规划·光伏模型参数估计
朔北之忘 Clancy44 分钟前
2026 年 3 月青少年软编等考 C/C++ 一级真题解析
c语言·开发语言·c++·青少年编程·题解·考级
MegaDataFlowers1 小时前
101.对称二叉树
算法
小成202303202651 小时前
C++~01面向对象基础
开发语言·c++
Jasmine_llq1 小时前
《B3939 [GESP样题 四级] 绝对素数》
数据结构·算法·素数判断算法·数字拆分与反转算法·区间遍历枚举·双条件判断逻辑
郝学胜-神的一滴1 小时前
干货版《算法导论》07:递归视角下的选择排序与归并排序
java·数据结构·c++·python·程序人生·算法·排序算法