当前位置: 首页 > news >正文

数据结构——KMP 字符串匹配算法:next 数组计算与优化

KMP 是 408 必考算法,这篇把 next 数组手算、代码实现、优化方法讲透。

一、KMP 核心思想

暴力匹配:匹配失败后主串回溯,浪费已匹配的信息 KMP:主串不回溯,利用 next 数组跳过不必要的比较

二、next 数组手算

模式串 "abaabcac" j=0:next[0] = -1 j=1:T[0:0]="" → 无子串 → next[1]=0 j=2:T[0:1]="ab" → 前缀{"a"} 后缀{"b"} → 无相等 → next[2]=0 j=3:T[0:2]="aba" → "a"长度1 → next[3]=1 j=4:T[0:3]="abaa" → "a"长度1 → next[4]=1 j=5:T[0:4]="abaab" → "ab"长度2 → next[5]=2 next = [-1, 0, 0, 1, 1, 2]

三、代码实现

publicstaticint[]getNext(Stringpattern){intm=pattern.length();int[]next=newint[m];next[0]=-1;inti=0,j=-1;while(i<m-1){if(j==-1||pattern.charAt(i)==pattern.charAt(j)){i++;j++;next[i]=j;}else{j=next[j];}}returnnext;}publicstaticintkmp(Stringtext,Stringpattern){intn=text.length(),m=pattern.length();int[]next=getNext(pattern);inti=0,j=0;while(i<n&&j<m){if(j==-1||text.charAt(i)==pattern.charAt(j)){i++;j++;}else{j=next[j];}}returnj==m?i-j:-1;}

四、nextval 优化

publicstaticint[]getNextVal(Stringpattern){intm=pattern.length();int[]nextval=newint[m];nextval[0]=-1;inti=0,j=-1;while(i<m-1){if(j==-1||pattern.charAt(i)==pattern.charAt(j)){i++;j++;nextval[i]=pattern.charAt(i)!=pattern.charAt(j)?j:nextval[j];}else{j=nextval[j];}}returnnextval;}

💡 觉得有用的话,点赞 + 关注【张老师技术栈】吧!

http://www.jsqmd.com/news/1216537/

相关文章:

  • 2026武汉网站建设公司综合实力排行情况完整梳理 - 奔跑123
  • 2026年7月最新宝珀北京长安商场维修保养服务电话 - 宝珀官方售后服务中心
  • 2026年7月佛山靠谱AI搜索优化公司排行完整名单盘点 - 奔跑123
  • 需求驱动的Shell脚本开发实践与优化
  • 人教B版:第十一章 立体几何初步总结
  • PyTorch 深度学习专题【左扬精讲】—— 目标检测与语义分割:CNN 的下游任务应用
  • 智能开发环境架构:AI 增强的本地开发体验设计
  • 2026年7月靠谱的上海二手房买卖、借名买房、房产确权律师 - july123
  • 2026门窗密封专用TPV主流供应厂家综合评测梳理 - 奔跑123
  • 2026年7月最新长沙封窗靠谱商家综合排行全名单分享 - 奔跑123
  • Kimi LeetCode 3621. 位计数深度为 K 的整数数目 I Python3实现
  • 顶会论文的产品化落地路径:从论文伪代码到生产级Feature的工程评估体系
  • 2026年华东地区激光熔覆厂家联系方式盘点测评 - 奔跑123
  • 2026年口碑好的空气悬浮鼓风机厂家中立推荐参考指南 - 奔跑123
  • 二级市场核心认知误区全景拆解:别怕空仓、拒绝踏空焦虑,只赚确定性收益 / 会买是徒弟,会卖是师傅,会空仓才是交易祖师爷
  • 2026年7月18日更新:ChatGPT Plus / Pro 与 Codex——AI Agent 的上下文工程:为什么未来程序员竞争的是“信息组织能力”(GPT-5.6 最新技术分享)
  • 2026年高新区学生配镜现状:可靠服务商深度分析与决策指南 - 品牌鉴赏官2026
  • 2026年7月最新广东东莞主营坦克链电缆优质企业排行名录 - 奔跑123
  • 2026年唐山优秀竖炉制造厂推荐:探访唐山新拓科技有限公司 - 品牌鉴赏官2026
  • WAIC 2026 展会快讯 | 东软添翼医疗健康智能化解决方案2.0,全场景落地三甲医院内部
  • JavaScript 常用字符串方法详解(附实战代码)
  • 2026年深度体验之旅:留坝地道美食路线规划 - 品牌鉴赏官2026
  • 2026金华找寻靠谱GEO优化机构的日常经验分享 - 奔跑123
  • 2026 年新消息:锡林郭勒盟口碑好的K歌沐足整体隔音减震施工队哪家可靠,别再忍受吵闹!这套方案如何彻底拯救你的K歌体验? - 实业推荐官【官方】
  • 鸿蒙 ArkTS 实战:Menu Nutrition Advice 从智能助手到保存闭环完整解析
  • AI 电动窗帘电机智能功率 精准控制 完整选型方案
  • 浪琴官方售后服务中心地址及24小时服务电话实地考察报告_多信源验证(2026年7月最新) - 浪琴服务中心
  • 基于遗传算法的梯级水电站群联合火电厂优化调度研究(Python代码实现)
  • 2026 年武隆比较好的乳酸菌回收工厂哪家可靠,揭秘:乳酸菌回收如何颠覆你的健康投资? - 领域鉴赏官
  • 2026优选浙江家电继电器采购全场景适配指南 - 奔跑123