数据结构:(三)字符串——从暴力匹配到 KMP 的跨越
一、 串的存储结构定长 vs 堆串是由零个或多个字符组成的有限序列。在 C 语言中我们主要关注两种实现定长顺序存储使用静态数组char str[MAXSIZE]。缺点是长度固定容易发生截断。堆分配存储重点使用malloc()动态分配空间。typedef struct { char *ch; // 若是非空串则按串长分配存储区否则 ch 为 NULL int length; // 串长度 } HString;二、 模式匹配寻找子串的艺术所谓模式匹配就是在大串主串 S中找到小串模式串 T出现的位置。1. BF 算法 (Brute-Force) —— 暴力美学原理逐个比对。如果不匹配主串回溯到上一次起始位置的下一个模式串从头开始。缺点大量回溯效率低下。时间复杂度为 $。2. KMP 算法 —— 拒绝无用功KMP 的核心在于主串指针不回溯只让模式串向右“滑动”到最合适的位置。核心黑盒next数组next[j]的定义是当模式串中第个字符与主串失配时模式串应该退回到哪个位置重新比较。手算next数组的保姆级步骤第1位next[1] 0固定规则。第2位next[2] 1固定规则。第 j 位看第位之前的字符串寻找“最长相等前后缀”。例如串ababa当 $j4$ 时前面的串是aba。前缀{a, ab}后缀{ba, a}。最长相等前后缀是a长度为 1。则next[4] 长度 1 2。三、 KMP 核心代码深度注释很多同学看不懂get_next函数关键在于理解它本质上是一个“模式串自己匹配自己”的过程。void get_next(String T, int next[]) { i 1; j 0; next[1] 0; while (i T.length) { if (j 0 || T.ch[i] T.ch[j]) { // 如果 j0 说明要从头开始匹配 // 如果 ch[i] ch[j] 说明当前字符匹配成功前后缀长度加 1 i; j; next[i] j; } else { // 【深度注释】关键回溯点 // 如果不匹配j 回退到 next[j] 的位置 // 这种跳跃式回退利用了已有的匹配信息 j next[j]; } } }四、 深度复盘KMP 为什么快在 AI 领域或大规模数据检索中字符串匹配极度频繁。空间换时间KMP 预先分析模式串的结构生成next数组避免了主串的重复扫描。流式处理友好由于主串不回溯KMP 非常适合处理无法回头读取的数据流。五、 今日对比总结特性BF 算法KMP 算法主串指针 $i$频繁回溯一直向前不回头模式串指针 $j$每次失配回到 1回到next[j]时间复杂度适用场景短串、简单匹配长串、模式串有大量重复片段时今日避坑指南索引起点严版教材中串通常从索引1开始ch[0]弃用或存长度。如果你的代码从0开始next数组的值需要整体偏移。优化版 nextval当模式串出现连续重复字符如aaaaab时普通的next会进行无意义的比较。nextval就是为了跳过这些重复比较。

相关新闻

TRAE开发复杂软件最佳实践

TRAE开发复杂软件最佳实践

用AI辅助工具(此处以“TRAE”代指)来生成和开发复杂软件时,可以遵循一些经过验证的做法。这些做法核心是把人放在主导位置,把AI当作一个高效的副驾驶。1. 从蓝图开始,而不是从砖头开始复杂软件像一座大楼,不…

2026/7/8 13:27:48 阅读更多 →
Puppeteer MCP

Puppeteer MCP

在TRAE中使用Puppeteer MCP,相当于给你的AI编程助手装上了一双可以自动操作浏览器的手。它能把那些需要你手动点击、输入和查看网页的重复性工作,变成一句简单的指令。 🛠️ Puppeteer MCP 能做什么? 简单来说,它让T…

2026/7/7 20:43:34 阅读更多 →
Uncertainty-Aware Bayesian PINN机械退化趋势预测(Pytorch)

Uncertainty-Aware Bayesian PINN机械退化趋势预测(Pytorch)

算法特点贝叶斯不确定性量化,将贝叶斯神经网络与物理信息神经网络结合,提供预测结果的不确定性区间,解决传统黑箱模型信任度低的问题自适应物理约束学习,通过可学习物理权重参数,动态平衡数据驱动与物理规律约束&#…

2026/7/7 22:43:37 阅读更多 →

最新新闻

为什么有些论文,答辩老师听完研究假设体系,就默认通过?

为什么有些论文,答辩老师听完研究假设体系,就默认通过?

为什么有些论文,答辩老师听完研究假设体系,就默认通过?很多学生以为,论文答辩最重要的是结果分析。有人拼命准备数据解释,有人反复背诵研究结论,还有人担心老师会不会一直追问统计模型。但真正参加过多场答…

2026/7/9 9:55:17 阅读更多 →
终极免费视频压缩方案:如何高效缩减媒体文件90%体积?

终极免费视频压缩方案:如何高效缩减媒体文件90%体积?

终极免费视频压缩方案:如何高效缩减媒体文件90%体积? 【免费下载链接】compressO Convert any video/image into a tiny size. 100% free & open-source. Available for Mac, Windows & Linux. 项目地址: https://gitcode.com/gh_mirrors/co/c…

2026/7/9 9:55:17 阅读更多 →
Testsigma开源测试自动化平台:AI驱动的端到端测试解决方案

Testsigma开源测试自动化平台:AI驱动的端到端测试解决方案

Testsigma开源测试自动化平台:AI驱动的端到端测试解决方案 【免费下载链接】testsigma Testsigma is an agentic test automation platform powered by AI-coworkers that work alongside QA teams to simplify testing, accelerate releases and improve quality a…

2026/7/9 9:51:14 阅读更多 →
慢慢读懂了程序员的普通生活

慢慢读懂了程序员的普通生活

写惯了技术排坑、环境配置、bug复盘的文章,今天不想聊代码,不想聊框架,也不想聊什么进阶优化。单纯想碎碎念一下,做程序员这几年,被代码填满的日子里,那些没人写在技术文档里的生活细节。入行之前&#xff…

2026/7/9 9:49:13 阅读更多 →
TISAX版本切换:从 ISA6.0 到 ISA2027

TISAX版本切换:从 ISA6.0 到 ISA2027

2026 年 7 月 1 日,VDA 与 ENX 正式发布 TISAX 新版评估标准ISA2027,宣告现行 ISA6.0 版本生命周期进入倒计时。新版标准将于 2027 年 1 月 1 日强制实施,并确立以发布年份命名的年度迭代机制。这不仅是版本号的更替,更是汽车信息…

2026/7/9 9:49:13 阅读更多 →
Codex进化:从代码助手到工作系统

Codex进化:从代码助手到工作系统

导读: 很多人第一次用 Codex,还是把它当成「更会写代码的 ChatGPT」:看仓库、改 diff、跑测试、提 PR。真正有意思的变化,是 Codex 的边界正在往外推:当浏览器、邮件、日程、MCP、桌面 GUI、自动化都接进来之后&#x…

2026/7/9 9:49:13 阅读更多 →

日新闻

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 还在为Foobar2000找不到高质…

2026/7/9 0:01:04 阅读更多 →
ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍 【免费下载链接】ElegantBook Elegant LaTeX Template for Books 项目地址: https://gitcode.com/gh_mirrors/el/ElegantBook 你是否曾经为学术书籍的封面设计而烦恼?想要一个既专业又美观的封…

2026/7/9 0:03:06 阅读更多 →
如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南 【免费下载链接】pyodbc Python ODBC bridge 项目地址: https://gitcode.com/gh_mirrors/py/pyodbc 在当今数据驱动的商业环境中,企业级数据库连接已成为现代应用开发的核心需求。pyodbc作为一款强大…

2026/7/9 0:07:11 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻