KMP算法:最长公共前后缀——初始化,左右指针偏移,套娃回溯。
代码中l为前缀左指针r为后缀右指针公共前后缀是有“套娃性”的也可以叫局部对称性。这是l要回溯的原因。例如c处next[5] 3 。所以d处发现前后缀不匹配就要回溯到next[next[l]]处即next[3]1。此时最长公共前缀ab →a。如果仍然不匹配就会变成:a→(空)即next[1]0。这个过程就像 “剥洋葱”从最长的公共前后缀开始一层层往回找更短的前后缀直到找到能匹配的或回到 0空前缀这就是的 所谓的“套娃性”。#includestdio.h #includestring.h void get_next(char T[],int next[]) //下标从1开始 { // 初始状态 next[1] 0; int l 0; int r 1; while(T[r]!\0) { if(l0||T[l]T[r]) next[r]l; else lnext[l]; } } void get_next_0(char T[],int next[]) //下标从0开始 { // 初始状态 next[0] -1; int l -1; int r 0; while(T[r]!\0) { if(l-1||T[l]T[r]) next[r]l; else lnext[l]; } } void get_nextval_0(char T[], int nextval[]) { int len strlen(T); int next[80]; // 先生成普通next数组 get_next_0(T, next); // 初始化nextval[0] nextval[0] -1; // 遍历生成nextval下标1到len-1 for (int j 1; j len; j) { // 关键判断当前字符 和 回溯位置的字符是否相同 if (T[j] T[next[j]]) { nextval[j] nextval[next[j]]; // 直接继承更优位置的nextval } else { nextval[j] next[j]; // 不同则保留原next值 } } int kmp(char S[],char T[]) { int i0,j0;//遍历比较指针初始化,i属于主串 j属于模式串 int next[80]; get_next_0(T,next); while(S[i]!\0T[j]!\0) { if(S[i]T[j]) { i;j; } else{ //字符匹配失败只需让模式串回溯即可主串仍然前进直到主串末尾宣告失败 jnext[j]; //kmp无需全部回溯 if(j-1){i;j;}//特殊情况j回溯到-1彻底无匹配 } } if(T[j]\0) return(i-strlen(T)1); //1表示位置从1开始计数 else return 0;//失败返回0 } int main() { char s[30]abzababcdcsdabc; char t[20]ababcd; int res kmp(s,t); printf(%d,res); }例如0123456ababcd011231代码模拟-ababcd初始轮 l0,r1,next[1]0lr0第一轮 符合l0整体后移next[2]1;lr01第二轮 不符合走elsel回溯l next[l] 0l r01第三轮 符合l0整体后移next[3]1l r011第四轮符合T[1] T[3] 即aa整体连续后移next[4]2l r0112第五轮符合T[2] T[4] 即bb整体连续后移next[5]3l r01123第六轮不符合T[3]a ! T[5]c ,走elsel回溯l next[l] 1处l r01123第七轮不符合T[1]a ! T[5]c ,走elsel回溯l next[l] 0处l r01123第八轮符合l0整体后移next[6]1得到最终next数组ababcd011231

相关新闻

Flutter 三方库 image_compare 的鸿蒙化适配指南 - 实现毫秒级图像相似度评估、支持像素级对比与余弦相似度算法分析

Flutter 三方库 image_compare 的鸿蒙化适配指南 - 实现毫秒级图像相似度评估、支持像素级对比与余弦相似度算法分析

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 image_compare 的鸿蒙化适配指南 - 实现毫秒级图像相似度评估、支持像素级对比与余弦相似度算法分析 前言 在进行 Flutter for OpenHarmony 的视觉类应用(如相…

2026/5/17 11:54:33 阅读更多 →
AI时代开发者的身份重构:决策栈的价值

AI时代开发者的身份重构:决策栈的价值

上周,我填写了一份托斯卡纳修道院读书会的注册表格。学者们正在编撰一本关于伊万伊里奇思想遗产的著作。标准的字段——姓名、所属机构、国家。我填写了"网络国家"。 提交前我盯着它坐了十分钟。诚实的回答——“我不知道了”——却填不进这个字段。 同样…

2026/5/17 11:54:32 阅读更多 →
构建标准化ICT运维体系 解决企业网络运行不稳定问题

构建标准化ICT运维体系 解决企业网络运行不稳定问题

企业网络运行稳定性提升方案 摘要 为企业IT部门、信息化负责人及运维团队提供可落地的标准化运维路径,通过可视化运行监控系统,支撑系统规划、标准化交付与平台化运维,实现高确定性的ICT基础设施管理,降低网络异常发生率&#x…

2026/5/17 11:54:28 阅读更多 →

最新新闻

工艺节点演进全解读:从180nm到3nm,芯片是怎么越做越小的

工艺节点演进全解读:从180nm到3nm,芯片是怎么越做越小的

一、背景:"纳米"到底是什么意思?很多人以为XX纳米就是晶体管的栅极宽度。事实没这么简单——28nm以下,"节点"已经变成了一个营销术语,不代表实际尺寸。180nm ~ 65nm:节点数字≈栅极最小线宽&#…

2026/7/2 20:25:07 阅读更多 →
2026医院时钟安装全流程及主流靠谱品牌选型对比指南

2026医院时钟安装全流程及主流靠谱品牌选型对比指南

医院时钟安装前置准备与核心选型标准医院时钟系统是保障医疗行为时间统一、防范医患纠纷的核心基础设施,安装前的需求调研与选型标准直接关系到后续系统的稳定性与合规性。对于承接三甲医院旧院改造项目的弱电工程商来说,既要避免破墙布线影响医院正常营…

2026/7/2 20:23:07 阅读更多 →
图吧工具箱

图吧工具箱

链接:https://pan.quark.cn/s/9617edc2c853工具箱无需安装解压即可食用,而且不需要联网,纯净的本地使用工具,图吧工具箱主程序类似一个启动器,使用易语言、vbs脚本语言编写,其中易语言部分负责界面及简单的…

2026/7/2 20:21:07 阅读更多 →
含1324个健身练习、6种语言说明的数据集,助你开发应用与开展研究!

含1324个健身练习、6种语言说明的数据集,助你开发应用与开展研究!

练习数据集这是个开发者设置向导,还提供结构化、多语言的练习数据集。借助它,你能搭建自己的练习应用后端(数据库架构、API代码、大语言模型提示词)。该数据集涵盖1324个练习,有类别、身体部位、所需器材、目标肌肉群等…

2026/7/2 20:17:05 阅读更多 →
家政小程序服务评价系统设计:匿名反馈与阿姨改进追踪【完整系统+解析】

家政小程序服务评价系统设计:匿名反馈与阿姨改进追踪【完整系统+解析】

博主介绍: 所有项目都配有从入门到精通的安装教程,可二开,提供核心代码讲解,项目指导。 项目配有对应开发文档、解析等 项目都录了发布和功能操作演示视频;项目的界面和功能都可以定制,包安装运行&#xff…

2026/7/2 20:15:04 阅读更多 →
451. Java 正则表达式 - Matcher 的 start(), end(), matches() 和 lookingAt()

451. Java 正则表达式 - Matcher 的 start(), end(), matches() 和 lookingAt()

文章目录451. Java 正则表达式 - Matcher 的 start(), end(), matches() 和 lookingAt()1️⃣ 使用 start() 和 end() 方法功能:示例:统计单词 "dog" 出现次数2️⃣ 使用 matches() 和 lookingAt() 方法功能:示例:&…

2026/7/2 20:15:04 阅读更多 →

日新闻

Path of Building PoE2:5步掌握流放之路2角色构建的终极免费工具

Path of Building PoE2:5步掌握流放之路2角色构建的终极免费工具

Path of Building PoE2:5步掌握流放之路2角色构建的终极免费工具 【免费下载链接】PathOfBuilding-PoE2 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding-PoE2 还在为《流放之路2》复杂的角色构建而头疼吗?面对上千个天赋节点…

2026/7/2 19:10:19 阅读更多 →
SSH密钥生成原理与跨平台安全实践指南

SSH密钥生成原理与跨平台安全实践指南

1. 为什么今天还必须亲手生成 SSH 密钥——不是“过时操作”,而是安全基建的起点你可能已经点开过几十次 GitHub 的 SSH 设置页,也见过终端里一闪而过的ssh-keygen -t ed25519 -C "your_emailexample.com"命令,但真正理解它在 macO…

2026/7/2 19:10:19 阅读更多 →
GAN工程化实战:从图像合成到物理建模的工业落地路径

GAN工程化实战:从图像合成到物理建模的工业落地路径

1. 项目概述:当GAN不再只是“画图玩具”,它正在悄悄重构现实世界的生产逻辑“Astonishing GAN Applications”——这个标题乍看像科技展会的宣传语,但在我过去三年深度参与17个GAN落地项目的实操经验里,它根本不是修辞&#xff0c…

2026/7/2 19:12:20 阅读更多 →

周新闻

月新闻