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]

相关推荐
q_3023819556几秒前
14.7MB轻量模型!NVIDIA Jetson边缘设备解锁工厂设备故障预警新方案
人工智能·python·算法·ascend·算子开发
海盗猫鸥4 分钟前
「C++」继承
开发语言·c++
yayapoi~6 分钟前
c++开方效率测试
c++
阿闽ooo7 分钟前
抽象工厂模式实战:用C++打造家具生产系统(附UML图与完整代码)
c++·设计模式·抽象工厂模式·uml
爱敲点代码的小哥8 分钟前
C#哈希表遍历技巧全解析以及栈 堆 队列的认识
算法·哈希算法
梁下轻语的秋缘10 分钟前
用 LoRa + W5500 做一个无线呼叫器
c语言·c++
xiaoxue..10 分钟前
爬楼梯问题:从递归到动态规划再到闭包的进化之路
javascript·算法·面试·动态规划
YoungHong199213 分钟前
C++ 硬核基础:为什么函数重载不能只看返回值?
开发语言·c++
CoovallyAIHub13 分钟前
YOLO11算法深度解析:四大工业场景实战,开源数据集助力AI质检落地
深度学习·算法·计算机视觉
我不会插花弄玉17 分钟前
vector【由浅入深-C++】
c++