数据结构——KMP 字符串匹配算法:next 数组计算与优化

发布时间:2026/7/19 0:43:50

数据结构——KMP 字符串匹配算法:next 数组计算与优化
KMP 是 408 必考算法这篇把 next 数组手算、代码实现、优化方法讲透。一、KMP 核心思想暴力匹配匹配失败后主串回溯浪费已匹配的信息 KMP主串不回溯利用 next 数组跳过不必要的比较二、next 数组手算模式串 abaabcac j0next[0] -1 j1T[0:0] → 无子串 → next[1]0 j2T[0:1]ab → 前缀{a} 后缀{b} → 无相等 → next[2]0 j3T[0:2]aba → a长度1 → next[3]1 j4T[0:3]abaa → a长度1 → next[4]1 j5T[0:4]abaab → ab长度2 → next[5]2 next [-1, 0, 0, 1, 1, 2]三、代码实现publicstaticint[]getNext(Stringpattern){intmpattern.length();int[]nextnewint[m];next[0]-1;inti0,j-1;while(im-1){if(j-1||pattern.charAt(i)pattern.charAt(j)){i;j;next[i]j;}else{jnext[j];}}returnnext;}publicstaticintkmp(Stringtext,Stringpattern){intntext.length(),mpattern.length();int[]nextgetNext(pattern);inti0,j0;while(injm){if(j-1||text.charAt(i)pattern.charAt(j)){i;j;}else{jnext[j];}}returnjm?i-j:-1;}四、nextval 优化publicstaticint[]getNextVal(Stringpattern){intmpattern.length();int[]nextvalnewint[m];nextval[0]-1;inti0,j-1;while(im-1){if(j-1||pattern.charAt(i)pattern.charAt(j)){i;j;nextval[i]pattern.charAt(i)!pattern.charAt(j)?j:nextval[j];}else{jnextval[j];}}returnnextval;} 觉得有用的话点赞 关注【张老师技术栈】吧

相关新闻

Python 数据清洗实战——缺失值、异常值、重复值处理

Python 数据清洗实战——缺失值、异常值、重复值处理

2026/7/19 0:43:50

实际数据很少是干净的,缺失值、异常值、重复值都需要处理。这篇用 pandas 把这三种情况说清楚。 一、缺失值处理 import pandas as pd import numpy as np# 查看缺失值 print(df.isnull().sum())# 删除缺失值 df.dropna(subset["姓名"], inplaceTrue)# 填…

SpringBoot 整合 JWT——Token 认证与自动刷新

SpringBoot 整合 JWT——Token 认证与自动刷新

2026/7/19 0:43:50

Session 方式在分布式环境下不好用,JWT(JSON Web Token)是目前主流的无状态认证方案。服务端不需要存 Session,Token 中包含了用户信息。 一、JWT 结构 header.payload.signatureheader: 加密算法 payload: 用户数据&#xff08…

SpringBoot 整合 Nacos 配置中心——配置集中管理

SpringBoot 整合 Nacos 配置中心——配置集中管理

2026/7/19 0:43:50

当服务数量增多时,修改一个配置要在每个服务上改一遍,非常麻烦。Nacos 配置中心可以把所有配置集中管理,修改后实时生效,无需重启。 一、部署 Nacos docker run -d \--name nacos \-p 8848:8848 \-e MODEstandalone \nacos/nacos-…

718:public internl class;partial []

718:public internl class;partial []

2026/7/19 3:34:06

1 public internal class Product { } 代码解析:public internal class Product 1. 语法报错:修饰符冲突,无法编译 C# 类的访问修饰符不能同时写 public internal,二者互斥: public:程序集内外任意代码都能…

关于C++网络编程中Epoll和套接字阻塞与非阻塞有感

关于C++网络编程中Epoll和套接字阻塞与非阻塞有感

2026/7/19 3:34:06

前情提要:小编本人是刚开始学C网络编程的学生,来记录一下学习笔记,大家如果看到有错误请不要吝啬您的指导,助力每一位it追梦人我们创建的套接字不管是连接套接字Acceptor_fd还是客户端套接字Client_fd都会放到Epoll中来进行管理&a…

Unity CJ Lib工具库:数学几何算法与随机数生成实战指南

Unity CJ Lib工具库:数学几何算法与随机数生成实战指南

2026/7/19 3:34:06

1. 项目概述:Unity CJ Lib 是什么,以及为什么你需要它 如果你在Unity开发中,尤其是涉及到一些底层数学计算、几何处理或者需要一套现成的、经过验证的工具库时,还在重复造轮子,那今天聊的这个开源项目可能就是你一直在…

stat命令详解

stat命令详解

2026/7/19 3:34:06

stat 是一个用于显示文件或文件系统详细状态信息的命令行工具--1。与 ls -l 相比,它能提供更全面、更底层的元数据(Metadata),如文件大小、权限、所有者、各种时间戳、inode 号码等-。 📝 命令语法与常用选项 stat 命…

Planner-Executor架构:构建可落地的多智能体协作系统

Planner-Executor架构:构建可落地的多智能体协作系统

2026/7/19 3:34:06

1. 项目概述:当“会议总指挥”不再需要你盯每一封邮件 你有没有过这种体验:手头同时推进三个项目,每个都卡在不同环节——市场部催着要活动方案,技术团队发来API接口文档说“等你确认”,法务又甩过来一份合同草案标注了…

XNA4.0 RPG游戏开发:从入门到实战

XNA4.0 RPG游戏开发:从入门到实战

2026/7/19 3:24:05

1. XNA4.0 RPG游戏开发入门指南 十年前当我第一次接触XNA时,就被它简洁高效的2D/3D游戏开发框架所吸引。作为微软推出的游戏开发工具,XNA虽然已经停止官方维护,但依然是学习游戏编程原理的绝佳平台。这个系列教程将带你从零开始,用…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/19 0:03:49

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/19 0:03:49

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/19 0:03:49

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/19 0:03:49

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/19 0:03:49

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/19 0:03:49

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…