尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
使用next数组加速匹配过程
如果我们在匹配之前得到这么一个关于模式 p 的每一个位置 index 失去匹配后模式串的匹配指针应该调整为 next[index] 的 next 数组的话那么我们的匹配过程可以变成这样代码public class StrContainsKmp { public static boolean contains(String s, String p) { int ls s.length(), lp p.length(), i 0, j 0; int[] next getNext(p);//获取关于模式串p的next数组 while(i ls - lp j lp) { if(s.charAt(i) p.charAt(j)) { i; j; /* 如果模式串p的第一个字符p[0]和字符串s的当前字符s[i]都不匹配 那么说明s中从i开始不可能匹配出p来因此换下一个开头继续尝试 */ }else if(j 0) i; /* 否则j位置不是0说明它前面有匹配成功的部分 那么此时j应该调整为next[j]的位置 */ else j next[j]; } return j lp; } }next 数组能加速匹配过程可以从下面两个方面来理解保证 i 指针不回退指导 j 指针的调整在我们匹配失败的时候它可以利用我们之前已经匹配的部分字符串以前做过的努力在保证 i字符串 s 的匹配指针不回退的情况下指导此时指针 j模式串的匹配指针应该做怎样的调整。前面的图示已经向大家说明了这一点。跳过了一些无需验证的可能性还记得我们的暴力做法吗它尝试字符串 s 中每一个可能的开头位置即验证所有的可能性而 next 数组指导 j 的调整可以跳过一些根本不可能匹配出来模式串 p 的位置如下图所示这两种理解是等价的。
RELATED

相关推荐

Osg 开发三:OpenSceneGraph 变换节点及工程实例

Osg 开发三:OpenSceneGraph 变换节点及工程实例

文章目录一 OSG Group 节点二 OSG 变换节点三 变换节点示例1 开发环境2 工程配置3 位置变换节点示例4 矩阵变换节点示例5 对齐变换节点示例其他一 OSG Group 节点 osg::Group 组节点是 OSG 的核心部分,用来组织场景图中的数据。osg::Group 上可以添加任意数量的子节…

📅 2026/8/9 3:07:16
Element Plus性能优化实战指南:三步实现高效组件库访问与开发体验

Element Plus性能优化实战指南:三步实现高效组件库访问与开发体验

Element Plus性能优化实战指南:三步实现高效组件库访问与开发体验 【免费下载链接】element-plus 🎉 A Vue.js 3 UI Library made by Element team 项目地址: https://gitcode.com/GitHub_Trending/el/element-plus Element Plus作为Vue.js 3生态…

📅 2026/8/20 20:03:52
GoPro Python自动化控制终极指南:5个高级技巧释放相机全部潜力

GoPro Python自动化控制终极指南:5个高级技巧释放相机全部潜力

GoPro Python自动化控制终极指南:5个高级技巧释放相机全部潜力 【免费下载链接】gopro-py-api Unofficial GoPro API Library for Python - connect to GoPro via WiFi. 项目地址: https://gitcode.com/gh_mirrors/go/gopro-py-api gopro-py-api是一个强大的…

📅 2026/8/9 13:34:06
MORE NEWS

更多资讯

📰

【郑州工程技术学院主办 | 河南郑州召开 | SPIE出版】第三届模式识别与图像分析国际学术会议(PRIA 2026)

第三届模式识别与图像分析国际学术会议(PRIA 2026) 2026 3rd International Conference on Pattern Recognition and Image Analysis 第三届模式识别与图像分析国际学术会议(PRIA 2026)将于2026年11月6-8日在河南郑州召开&#…

📰

C++高性能爬虫框架设计与优化实践

1. 为什么需要C爬虫框架?在Python爬虫大行其道的今天,用C实现爬虫框架看似违背了"不要重复造轮子"的原则。但当我需要处理以下场景时,现有方案就显得力不从心:高频采集证券交易数据时Python的GIL锁导致吞吐量瓶颈爬取实…

📰

Solon AI v3.10:Java全栈智能体开发框架解析

1. Solon AI v3.10 框架概览与核心价值Solon AI v3.10 作为一款面向Java开发者的全栈智能体开发框架,其最大特点是实现了从Java 8到Java 26的跨版本兼容。这种设计背后体现了框架开发团队对实际生产环境的深刻理解——大量企业仍在使用Java 8等老版本,而…

📰

MiniPdf方:.NET开源Office转PDF的高效解决方案

1. 项目概述:MiniPdf方 - .NET生态的Office转PDF利器在.NET开发领域,处理Office文档转换一直是令人头疼的难题。传统方案要么依赖昂贵的商业组件,要么需要复杂的服务器环境配置。而MiniPdf方的出现,首次为.NET开发者提供了一个完全…

📰

基于高阶循环谱的MPSK载波频率估计与MATLAB实现

简介:针对MPSK信号在非理想信道下难以精确同步载波的问题,这份MATLAB实现以高阶循环谱为工具,给出了一套完整的载波频率估计方案。内容覆盖BPSK、QPSK、8PSK等常见相移键控信号,兼顾理论阐述与可运行代码:从调制信号生…

📰

统一数据访问平台DataHub架构设计与实践

1. 统一数据访问平台的核心价值 在数据爆炸式增长的时代,企业面临的最大挑战之一是如何高效管理和利用分散在各个系统中的数据资产。DataHub作为新一代统一数据访问平台,其核心价值在于打破了传统数据孤岛,通过标准化接口和统一元数据管理&am…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬