数据结构––kmp算法(串)

server/2024/11/15 4:21:55/

kmp算法作为串的一个重要内容,必然有一定的难度,而在看到各类教辅书里的概念与解释后,其晦涩难懂的内容直接劝退一部分人,现在,让我们来看看吧

KMP解决的问题类型

KMP算法的作用就是在一个已知的字符串中查找子串的位置,就是串的匹配模式。比如,主串a = “cabcabcde”,子串b = “ab”。而我们就是要在a中找b的位置,那么这么看来是很简单的,但是,如果是字符串很长的时候呢?这样找起来就很麻烦了。接下来就介绍2种方法。

方法一:暴力求解法(BF算法)

从主串a和子串的第一个字符开始,将2个字符串的字符一一匹配,如果不匹配,主串就从第二个字符,子串从第一个字符开始再次匹配,如果不匹配,就从主串第三个字符,子串第一个字符开始。

那么,暴力求解法为什么这么慢呢?因为回溯的次数太多了

方法二:

每一个字符前的字符串都有最长相等前后缀,而且最长相等前后缀的长度是我们移位的关键,所以我们单独用一个next数组存储子串的最长相等前后缀的长度。而且next数组的数值只与子串本身有关。
所以next[i]=j,含义是:下标为i 的字符前的字符串最长相等前后缀的长度为j。
我们可以算出,子串t= "abcabcmn"的next数组为next[0]=-1(前面没有字符串单独处理)


http://www.ppmy.cn/server/8062.html

相关文章

【学习笔记之vue】vue项目放在springboot项目里后,刷新页面会显示whitelabel error page

vue项目放在springboot项目里后,刷新页面会显示whitelabel error page。 解决方案: 当你在Spring Boot项目中嵌入Vue项目,并且刷新页面时遇到了“Whitelabel Error Page”,这通常意味着Spring Boot后端没有正确地处理前端路由的请求。Vue.j…

windows下python opencv ffmpeg读取摄像头实现rtsp推流 拉流

windows下python opencv ffmpeg读取摄像头实现rtsp推流 拉流 整体流程1.下载所需文件1. 1下载rtsp推流服务器1.2 下载ffmpeg2. 开启RTSP服务器3. opencv 读取摄像头并调用ffmpeg进行推流4. opencv进行拉流5. opencv异步拉流整体流程 1.下载所需文件 1. 1下载rtsp推流服务器 下…

SpringMVC--RESTful

1. RESTful 1.1. RESTful简介 REST:Representational State Transfer,表现层资源状态转移。 RESTful是一种网络架构风格,它定义了如何通过网络进行数据的交互。这种风格基于HTTP协议,使得网络应用之间的通信变得更加简洁和高效。…

数据结构与算法学习笔记五--串

目录 前言 一、定义 二、串的表示和实现 1.定长顺序存储表示 1.定义 2.串拼接 3.求子串 4.完整代码 2.堆分配存储表示 1.定义 2.求串长 3.串比较 4.清空s串,释放空间 5.串拼接 6.求子串 7.完整代码 3.串的块链存储表示 前言 这篇文章主要记录下串的…

SpringBoot如何创建监听器?

在Java中,监听器(Listener)是一种设计模式,它允许对象在 特定事件 发生时 自动执行某些操作 。这种设计模式通常用于实现 发布-订阅模型 ,其中监听器(订阅者)订阅了某个对象(发布者&…

web server apache tomcat11-06-Host Manager App

前言 整理这个官方翻译的系列,原因是网上大部分的 tomcat 版本比较旧,此版本为 v11 最新的版本。 开源项目 从零手写实现 tomcat minicat 别称【嗅虎】心有猛虎,轻嗅蔷薇。 系列文章 web server apache tomcat11-01-官方文档入门介绍 web…

单页面首屏优化,打包后大小减少64M,加载速度快了13.6秒

需求背景 从第三方采购的vue2 ElementUI实现的云管平台,乙方说2011年左右就开始有这个项目了(那时候有Vue了吗,思考.jpg)。十几年的项目,我何德何能可以担此责任。里面的代码经过多人多年迭代可以用惨不忍睹来形容&a…

ElasticSearch 创建索引超时(ReadTimeoutError)

报错现象 在 Python 中调用 client.indices.create 来创建 ElasticSearch 索引时,报如下错误: elastic_transport.transport - INFO - PUT http://127.0.0.1:9200/document_page?timeout60s [status:N/A duration:10.011s] elastic_transport.node_po…