尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

使用next数组加速匹配过程

使用next数组加速匹配过程
📅 发布时间:2026/7/12 22:18:21

如果我们在匹配之前,得到这么一个关于模式 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 的位置,如下图所示:

这两种理解是等价的。

相关新闻

  • 如何快速上手Web Audio Samples:10个必学音频处理示例解析
  • TDD-Katas项目解析:从Bowling Game到String Calculator的核心实现原理
  • 2026年华东区域充电转接头相关企业名录梳理 - 起跑123

最新新闻

  • npm-security-best-practices与现代包管理器:npm、pnpm、yarn和bun的安全配置对比
  • Unity数据存储实战:EasySave3插件从入门到精通
  • 解锁AI文本处理新境界:Tiktoken高性能Tokenizer完全指南
  • 关于文献【ICML】
  • 基于深度学习的车牌识别与停车场管理系统31(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • ElevenLabs与PlayHT、Resemble.ai横向评测(2024Q2最新数据):中文停顿准确率、情感连贯性、API响应延迟TOP3对比

日新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号