【数据结构】串的模式匹配(朴素匹配+KMP+nextval)
数据结构串的模式匹配朴素匹配KMPnextval说明本文下标从 1 开始文章目录数据结构串的模式匹配朴素匹配KMPnextval说明本文下标从 1 开始1.基本概念子串与模式串的区别2.朴素模式匹配算法核心思想字符匹配失败时匹配成功3.KMP算法核心思想时间复杂度4.next数组的计算next[j]的含义规则例1T ababaa例2T aaaab5.KMP算法的进一步优化nextval数组的计算例1T ababaa例2T aaaab1.基本概念模式匹配是指在主串中查找与模式串待搜索的字符串完全相同的子串并返回其首次出现的位置子串与模式串的区别子串是主串的一部分在主串中一定存在模式串待搜索的字符串在主串中不一定存在2.朴素模式匹配算法朴素模式匹配算法的时间复杂度O(mn)核心思想逐个对比主串和模式串的字符如果字符匹配不成功模式串回溯到第一个位置主串回溯到本轮起始位置的下一个位置重新匹配直到找到主串中与模式串完全相同的子串返回子串起始位置字符匹配失败时i i - (j - 1) 1 i - j 2j 1匹配成功返回模式串在主串中首次出现的位置return i - T.length;3.KMP算法KMP算法是对朴素模式匹配算法的优化核心思想匹配失败时i不回退仅通过预处理得到的next数组调整 j 的位置避免了重复字符的比较从而将时间复杂度从O(mn)优化为O(m n)时间复杂度预处理next数组 O(m)匹配 O(n)总时间复杂度 O(m n)4.next数组的计算next[j]的含义当模式串的第j个字符失配时下一轮应从模式串的next[j]位置开始比较规则next[1] 0next[2] 1从模式串的第三个字符开始next数组的值是模式串中当前字符之前的串的最长公共前后缀的长度1例1T ababaa下标123456next011234next[1] 0, next[2] 1从模式串的第3个字符 a 开始第3个字符 a 前面是 “ab”没有公共前后缀所以next[3] 0 1 1第4个字符 b 前面是 “aba”最长公共前后缀是 “a”长度是1所以next[4] 1 1 2第5个字符 a 前面是 ”abab”最长公共前后缀是 “ab”长度是2所以next[5] 2 1 3第6个字符 a 前面是 “ababa”最长公共前后缀是 “aba”长度是3所以next[6] 3 1 4例2T aaaab下标12345next01234next[1] 0, next[2] 1从模式串的第3个字符 a 开始第3个字符 a 前面是 “aa”最长公共前后缀是”a”所以next[3] 1 1 2第4个字符 a 前面是 “aaa”最长公共前后缀是 “aa”长度是2所以next[4] 2 1 3第5个字符 b 前面是 ”aaaa”最长公共前后缀是 “aaa”长度是3所以next[5] 3 1 4[注意] 字符串的公共前后缀不包含字符串本身如字符串”aaa”的公共前后缀是”aa”而不是”aaa”5.KMP算法的进一步优化在使用KMP算法进行模式匹配时如果模式串j对应的字符和主串i对应字符不相等失配则将j移动至next[j]继续匹配但j移动后指向的字符可能和移动前指向的字符相同此时出现了重复的比较并且一定会失配所以可以使用nextval数组优化这种重复比较的情况nextval数组的计算nextval[1] 0从第 2 个字符开始当模式串中j对应的字符和next[j]对应的字符相等时nextval[j]的值等于next[j]的nextval值即nextval[j] nextval[next[j]]当模式串中 j 对应的字符和next[j]对应的字符不相等时nextval[j]的值等于next[j]的值即nextval[j] next[j]例1T ababaa下标123456next011234nextval010104nextval[1] 0从模式串的第2个字符 a 开始next[2] 1T.ch[1] aT.ch[2] b字符不相等 - nextval[2] next[2] 1next[3] 1T.ch[1] aT.ch[3] a字符相等 - nextval[3] nextval[next[3]] 0next[4] 2T.ch[2] bT.ch[4] b字符相等 - nextval[4] nextval[next[4]] 1next[5] 3T.ch[3] aT.ch[5] a字符相等 - nextval[5] nextval[next[5]] 0next[6] 4T.ch[4] bT.ch[6] a字符不相等 - nextval[6] next[6] 4例2T aaaab下标12345next01234nextval00004nextval[1] 0从模式串的第2个字符 a 开始next[2] 1T.ch[1] aT.ch[2] a字符相等 - nextval[2] nextval[next[2]] 0next[3] 1T.ch[1] aT.ch[3] a字符相等 - nextval[3] nextval[next[3]] 0next[4] 2T.ch[2] aT.ch[4] a字符相等 - nextval[4] nextval[next[4]] 0next[5] 3T.ch[3] aT.ch[5] b字符不相等 - nextval[5] next[5] 4

相关新闻

Ionic项目打包安卓APK全流程与优化指南

Ionic项目打包安卓APK全流程与优化指南

1. Ionic项目打包安卓APK全流程解析作为一款基于Web技术的跨平台开发框架,Ionic允许开发者使用HTML、CSS和JavaScript构建移动应用。但最终交付给用户的是原生格式的安装包,在安卓平台上就是APK文件。下面我将结合多年实战经验,详细拆解从Ion…

2026/7/18 3:41:03阅读更多 →
Python 列表完整入门教程:从基础定义到全套操作方法

Python 列表完整入门教程:从基础定义到全套操作方法

前言 在 Python 的数据体系里,数据类型分为两大阵营:基础单一数据类型 和 容器型数据类型。基础类型一个变量只能存一个值,而列表作为最常用的容器,能让单个变量批量存储多个值,日常开发、数据处理中使用频率极高。本…

2026/7/18 3:41:03阅读更多 →
智能座舱与车路协同V2X研究:万字长文剖析车联网C-V2X通信及信息安全体系

智能座舱与车路协同V2X研究:万字长文剖析车联网C-V2X通信及信息安全体系

💡 阅读提示:本文从技术原理、产业政策、核心组件、应用场景到信息安全,深度拆解C-V2X车路协同体系。读完你将彻底搞懂——为什么说车路协同是自动驾驶从“单车智能”走向“系统级协同”的关键拼图。🚨 开篇:从“孤军奋…

2026/7/18 3:41:03阅读更多 →
Multi-Scale Dense Networks for Resource Efficient Image Classification 解读

Multi-Scale Dense Networks for Resource Efficient Image Classification 解读

一、论文基本信息 论文题目:Multi-Scale Dense Networks for Resource Efficient Image Classification 方法简称:MSDNet,Multi-Scale DenseNet 作者:Gao Huang、Danlu Chen、Tianhong Li、Felix Wu、Laurens van der Maaten、…

2026/7/18 4:46:08阅读更多 →
BranchyNet: Fast Inference via Early Exiting from Deep Neural Networks 解读

BranchyNet: Fast Inference via Early Exiting from Deep Neural Networks 解读

一、论文基本信息 论文题目:BranchyNet: Fast Inference via Early Exiting from Deep Neural Networks 作者:Surat Teerapittayanon、Bradley McDanel、H. T. Kung 发表信息:ICPR 2016;arXiv 版本题名为 BranchyNet: Fast Inf…

2026/7/18 4:46:08阅读更多 →
C++ OpenCV模板匹配框架:ROI引导的智能区域匹配技术详解

C++ OpenCV模板匹配框架:ROI引导的智能区域匹配技术详解

1. 项目概述与核心价值最近在做一个视觉检测项目,需要从一张复杂的背景图中,精准定位一个特定的小零件。零件本身可能旋转,也可能出现在画面的不同区域。直接用OpenCV的matchTemplate函数在全图扫描,不仅速度慢,而且背…

2026/7/18 4:46:08阅读更多 →
SpringBoot 完整启动原理

SpringBoot 完整启动原理

SpringBoot 启动核心分为两大块:主类 SpringBootApplication 注解组合能力;SpringApplication.run() 完整启动流程,包含环境准备、上下文创建、自动配置、Bean 扫描、内嵌容器启动等步骤。下面分层梳理,逻辑清晰、贴合面试答题节奏…

2026/7/18 4:46:08阅读更多 →
C++生产者消费者模型:从互斥锁到线程安全队列的实战实现

C++生产者消费者模型:从互斥锁到线程安全队列的实战实现

1. 项目概述:当生产者与消费者模型遇上职场现实最近在整理一些并发编程的笔记,突然觉得教科书里那个经典的“生产者与消费者”问题,简直是为我们这行量身定做的绝佳比喻。想想看,一个项目里,疯狂输出需求、变更和想法的…

2026/7/18 4:46:08阅读更多 →
RK3588音频开发实战:libmedia API从入门到精通

RK3588音频开发实战:libmedia API从入门到精通

在RK3588开发板上进行音频应用开发时,很多开发者会遇到从命令行工具到编程接口的过渡难题。libmedia作为Rockchip平台的重要音频处理库,其API使用方式与传统的ALSA直接调用有显著差异。本文将基于实际项目经验,详细介绍RK3588平台libmedia音频…

2026/7/18 4:41:08阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/17 10:42:55阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/17 8:31:03阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/17 13:22:23阅读更多 →
从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:14阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:14阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:14阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/17 22:48:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/17 13:22:38阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/17 17:26:50阅读更多 →