求KMP的算法

求KMP的算法### 求next数组方法:

首先求每个子串的最长前后缀

1、next 数组的定义
next 数组(前缀表)是在 KMP 算法中使用到的,用于匹配模式串相同前后缀长度

它可以减少匹配次数,其原理是将模式串中每个子串的相同前后缀长度记录下来,当在文本串中匹配失败时,就根据前缀表——即 next 数组——找到模式串中匹配失败前一个字符的位置所对应的前缀尾字符,将模式串的指针移动到该字符

过程说明:

下标从0开始  0 1 2 3 4 5 6 7 8 文本串  a a b a a b a a f 模式串  a a b a a f next 数组  0 1 0 1 2 0 右移补-1的next 数组  − 1 0 1 0 1 2 模式串  a a b a a f 下标从1开始  1 2 3 4 5 6 7 8 9 右移补-1的基础上整体加1的next 数组  0 1 2 1 2 3 \begin{array}{|r|l|l|l|l|l|l|l|l|l|l|} \hline \text { 下标从0开始 } & \mathbf{0} & \mathbf{1} & \mathbf{2} & \mathbf{3} & \mathbf{4} & \mathbf{5} & \mathbf{6} & \mathbf{7} & \mathbf{8} \\ \hline \text { 文本串 } & \mathrm{a} & \mathrm{a} & \mathrm{b} & \mathrm{a} & \mathrm{a} & \mathrm{b} & \mathrm{a} & \mathrm{a} & \mathrm{f} \\ \hline \text { 模式串 } & \mathrm{a} & \mathrm{a} & \mathrm{b} & \mathrm{a} & \mathrm{a} & \mathrm{f} & & & \\ \hline \text { next 数组 } & 0 & 1 & 0 & 1 & 2 & 0 & & & \\ \hline \text { 右移补-1的next 数组 } & -1 & 0 & 1 & 0 & 1 & 2 & & & & \\ \hline \text { 模式串 } & & & \mathrm{a} & \mathrm{a} & \mathrm{b} & \mathrm{a} & \mathrm{a} & \mathrm{f} & & & \\ \hline \text { 下标从1开始 } & \mathbf{1} & \mathbf{2} & \mathbf{3} & \mathbf{4} & \mathbf{5} & \mathbf{6} & \mathbf{7} & \mathbf{8} & \mathbf{9} \\ \hline \text { 右移补-1的基础上整体加1的next 数组 } & 0 & 1 & 2 & 1 & 2 & 3 & & & & \\ \hline \end{array}  下标从0开始  文本串  模式串  next 数组  右移补-1next 数组  模式串  下标从1开始  右移补-1的基础上整体加1next 数组 0aa01101aa10212bb01a323aa10a414aa21b525bf02a636aa77af88f9
求next数组方法:

  1. 求每个字串对最长前后缀
    1. a的最长前后缀为0
    2. aa的最长前后缀为1
    3. aab的最长前后缀为0
    4. aaba的最长前后缀为1
    5. aabaa的最长前后缀为2
    6. aabaaf的最长前后缀为0
    7. 求得最长前后缀数组为[0,1,0,1,2,0]
  2. 右移补-1得到next数组,目的就是让失配点的下标直接指向字符长为5的最长前后缀的下一个位置开始匹配(最长前后缀的位置一定会失配因此跳过)。
  3. 如果数组下标从1开始就,整体加1。
  4. 【总结】:第一位-1,求1到n位子串前后缀长度得到数组,将得到的数组整体加1。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/800550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吴恩达机器学习笔记:第 7 周-12支持向量机(Support Vector Machines)12.1-12.3

目录 第 7 周 12、 支持向量机(Support Vector Machines)12.1 优化目标 第 7 周 12、 支持向量机(Support Vector Machines) 12.1 优化目标 到目前为止,你已经见过一系列不同的学习算法。在监督学习中,许多学习算法的性能都非常类似,因此,重…

[计算机知识] TCP/IP网络模型、MySQL的结构

TCP/IP网络模型 应用层 给用户提供应用功能,如HTTP, DNS 应用层处于用户态,传输层及以下处于内核态 传输层 给应用层提供网络支持,如TCP, UDP TCP提供稳定、面向连接的网络传输协议 应用层的数据可能会太大,就需要进行拆分…

大恒相机-程序异常退出后显示被占用

心跳时间代表多久向相机发送一次心跳包,如果超时则设备会认为断开了,停止工作并主动释放占用资源。 在相机打开后添加代码: #ifdef _DEBUG//设置心跳超时时间 3sObjFeatureControlPtr->GetIntFeature("GevHeartbeatTimeout")-&…

Maven私服与高级配置:提升企业级开发效率

传递依赖: 添加spring-webmvc的核心依赖坐标时,会发现以外的其他jar包。因为项目依赖spring-webmvc.jar,而spring-webmvc.jar会依赖spring-bean.jar等,所以依赖spring-webmvc.jar时它依赖的jar包也会出现在当前工程中&#xff0c…

Github上传大文件(>25MB)教程

0.在github中创建新的项目(已创建可忽略这一步) 如上图所示,点击New repository 进入如下页面: 1.下载Git LFS 下载git 2.打开gitbash 3.上传文件,代码如下: cd upload #进入名为upload的文件夹,提前…

docker安装部署mysql后忘记root密码

应用场景是:用docker安装完mysql后,使用安装时候设置的密码登录不上MySQL; 1、修改docker映射出mysql的配置文件:my.cnf 在mysqld最下方添加skip-grant-tables进入安全模式(随意一个密码即可登录mysql) [m…

Key exchange failed.No compatible key exchange method.

使用远程工具secureCRT (版本:Version 7.0.0 (x64 build 326) ) 连接Linux(Ubuntu-22.04)系统 若20之前的ubuntu系统版本参考:: 🔗使用远程工具连接Linux系统 1、检查ssh-server版本 sudo dpk…

【御控物联】 JavaScript JSON结构转换(21):数组To对象——综合应用

文章目录 一、JSON结构转换是什么?二、术语解释三、案例之《JSON数组 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么? JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

希亦、石头、添可洗地机哪个更好用?资深家电测评师多角度横评

作为一个测评了许多洗地机的家电测评师,有很多人问我,他想入手一款适合自己的家用洗地机,不知道怎么购买到自己合适的,结果自己跑去搜索后发现为什么有的洗地机几百块钱就能入手,而有的又得几千元,买贵的怕…

JS--demo2录入学生信息

实现学生信息录取。 效果图: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><meta http-equiv"X-U…

golang特性1

golang特性 defer、recover异常捕获和处理 应用场景 1. 资源释放 文件操作&#xff1a;在打开文件后&#xff0c;使用 defer 关闭文件句柄&#xff0c;确保文件在函数退出时被关闭&#xff0c;避免资源泄漏。数据库连接&#xff1a;在打开数据库连接后&#xff0c;使用 def…

JS小项目-计算器

需求&#xff1a;根据素材制作如图所示页面&#xff0c;在页面输入第一个数和第二个数&#xff0c;单击&#xff08;加&#xff09;、&#xff0d;&#xff08;减&#xff09;、&#xff0a;&#xff08;乘&#xff09;、&#xff0f;&#xff08;除&#xff09;按钮时&#xf…

Your file appears not to be a valid OLE2 document

前言 org.apache.poi.poifs.filesystem.NotOLE2FileException:Invalid header signature; read 0x0000000000000000, expected 0xE11AB1A1E011CFD0 - Your file appears not to be a valid OLE2 document解决 Excel兼容模式打开老版本文件造成文件损坏&#xff0c;大多说的是点…

vscode-tasks.json自定义任务

以下所有内容,参考自VScode官方文档: vscode_tasks-docs任务说明文档vscode_variables-reference-docs变量说明文档vscode addtional docs for tasksvscode launch.json 属性设置文档,(下文没有介绍,没有涉及) 浅浅记录一下个人对vscode任务(task)的理解,还谈不上使用. 文章目…

linux通配符

通配符&#xff0c;它是一种用于匹配文件名的特殊字符。通配符在Linux中可以帮助我们更加方便和快捷地查找和操作文件。

IDEA new ui 找不到evaluate

问题 idea升级新版本之后&#xff0c;发现熟悉的evaluate不见了&#xff0c;只能通过快捷键启动&#xff0c;未免太麻烦了&#xff0c;如何像旧版一样添加图标直接点呢&#xff1f; 解决方案 打开debug窗口&#xff0c;在这个地方右键&#xff0c;然后选择add actions 搜索…

Mysql底层原理四:B+树索引

B树索引&#xff08;索引的原理&#xff09; 1.前言 前边我们详细唠叨了InnoDB数据⻚的7个组成部分&#xff0c;知道了各个数据⻚可以组成⼀个双向链表&#xff0c;⽽每个数据⻚中的记录会按照主键值从⼩到⼤的顺序组成⼀个单向链 表&#xff0c;每个数据⻚都会为存储在它⾥边…

【Web】纯萌新的CISCN刷题记录(1)

目录 [CISCN 2019华东南]Web11 [CISCN 2019华北Day2]Web1 [CISCN 2019初赛]Love Math [CISCN 2022 初赛]ezpop [CISCN 2019华东南]Double Secret [CISCN 2023 华北]ez_date [CISCN 2019华北Day1]Web1 [CISCN 2019华东南]Web4 [CISCN 2019华北Day1]Web2 [CISCN 2023 …

解决电脑无故自动关机或重启的15种方法,总有一种适合你

序言 你的Windows PC是否在没有警告的情况下关闭或重新启动?这背后有几个潜在的原因。例如,它可能是软件/硬件冲突、过热或硬盘驱动器错误。本故障排除指南将概述在Windows 10/11中修复自动关闭和重新启动的多个解决方案。 如果你的计算机经常关闭,则必须在安全模式下启动…

SSH免密登录 远程创建账户

初级代码游戏的专栏介绍与文章目录-CSDN博客 SSH免密登录是个很方便的功能&#xff0c;让你可以在一个节点上操作所有主机而不用输入用户名密码。当然这也是个安全隐患&#xff0c;操作节点密码泄露等于所有主机密码泄露。有利有弊&#xff0c;斟酌选择。 目录 一、原理 二、…