kmp算法next求解详解
创始人
2025-05-29 05:53:45

文章目录

  • 前言
  • 一、基本概念
  • 二、next数组里的两种情况
    • 1.产生两种情况的原因及介绍
    • 2.p[j + 1] == p[i]时
    • 3.p[j + 1] != p[i]时
  • 总结


在这里插入图片描述

前言

相信大家在学习kmp算法时,如果会求next了,那么对于kmp算法基本就懂了,可是求解next数组的理解和求解比较困难,那么我今天就来详细的来讲解kmp算法的next的求解,此文章是建立在你对于kmp算法有一定的了解之后,而对于next的求解比较头疼的基础之上的,如果懂可以去自行了解(我之后可能会出kmp算法得完整详解)

一、基本概念

1️⃣“非平凡前缀”:指除了最后一个字符以外,一个字符串的全部头部组合。
2️⃣“非平凡后缀”:指除了第一个字符以外,一个字符串的全部尾部组合。(后面会有例子,均简称为前/后缀)
3️⃣s[ ]是模式串,即母串。
4️⃣p[ ]是模板串,即需要匹配的字符串

二、next数组里的两种情况

1.产生两种情况的原因及介绍

我们先拿一个典型的代码来做演示

for (int i = 1, j = -1; i < m; i ++ )//i从1开始是因为next第一个永远为-1,j从-1开始是为了后面下标j所在位置的next就是j所在的位置{ne[0] = -1;while (j >= 0 && p[j + 1] != p[i])//j+1也是为了使j的所在位置的next就是j所在的位置{j = next[j];}if (p[j + 1] == p[i]) {j ++ ;}next[i] = j;}

2.p[j + 1] == p[i]时

在这里插入图片描述

3.p[j + 1] != p[i]时

🅿️其实这一步也是一个字符串匹配,只不过是利用了现有的条件,我这里举一个例子,当然例子只是用来帮助理解的
🔹在这里插入图片描述>🔹在这里插入图片描述
🔹在这里插入图片描述
🔹在这里插入图片描述

总结

相关内容

热门资讯

海誓山盟 浪漫青岛!甜蜜经济主... 2025年12月12日, 西安婚博会现场暖意融融, “海誓山盟 浪漫青岛” 青岛目的地婚礼推介会重磅...
原创 上... 2026年,上海机场免税店格局将迎来重大变化。 12月11日,上海机场发布《上海机场集团浦东、虹桥国...
粤游学·暖冬知行季 2026“...   12月12日,由省文化和旅游厅、省教育厅、省科技厅、省工业和信息化厅联合主办,广东省研学旅行协会...
东丽消防提醒:外出游玩虽安逸 ... 外出游玩虽安逸 消防安全勿忘记 冬季寒冷干燥 是消防安全事故多发期 在旅游景区游玩时 消防问题不...
北京颐和园雪后初霁 游客在雪后的颐和园游览。中国日报记者 姜东 摄 中国日报12月13日电(记者 姜东)2025年12月...