数据结构--KMP之求next数组

news2024/11/24 15:18:22

数据结构–KMP之求next数组

next数组的作用:当模式串的第j个字符失配时,从模式串的第 next[j]的继续往后匹配

任何模式串都一样,第一个字符不匹配时,只能匹配下一个子串,因此,往后余生 \color{balck}任何模式串都一样,第一个字符不匹配时,只能匹配下一个子串,因此,往后余生 任何模式串都一样,第一个字符不匹配时,只能匹配下一个子串,因此,往后余生 n e x t [ 1 ] 都无脑写 0 \color{red}next[1]都无脑写0 next[1]都无脑写0

手算next数组

在不匹配的位置前边,划一根美丽的分界线模式串一步一步往后退,直到分界线之前“能对上”,或模式串完全跨过分界线为止

next[3] = 1

next[5] = 3

n e x t [ 1 ] 都无脑写 0 \color{red}next[1]都无脑写0 next[1]都无脑写0
n e x t [ 2 ] 都无脑写 1 \color{red}next[2]都无脑写1 next[2]都无脑写1
其他next:在不匹配的位置前,划一根美丽的分界线
模式串一步一步往后退,直到分界线之前“能对上”,或模式串完全跨过分界线为止。此时j指向哪儿,next数组值就是多少

代码实现

代码一:

void Get_Next(SString T)
{
    for (int i = 2, j = 0; i <= T.length; i++)
    {
        while (j && T.ch[i] != T.ch[j + 1])
            j = next[j];
        if (T.ch[i] == T.ch[j + 1])
            j++;
        next[i] = j;
    }
}

代码二:

void Get_Next(SString T)
{
    next[1] = 0;
    int i = 1, j = 0;
    while (i <= T.length)
    {
        if (j == 0 || T.ch[i] == T.ch[j])
            next[++i] = ++j;
        else
            j = next[j];
    }
} 

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

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

相关文章

官宣 | 平行云正式升级为Paraverse平行云科技,开启全球业务新征程

6月30日, "Here is New-Gen Web"——Paraverse Global Strategy and Brand Launch Party 于香港科学园召开&#xff0c;会上平行云正式宣布升级为Paraverse平行云科技&#xff08;以下简称Paraverse)&#xff0c;并升级品牌标识“Paraverse”。这一全新命名与视觉焕新…

JUC--start线程

native&#xff1a;本地方法栈&#xff0c;c语言的函数,但凡调用的是这个接口&#xff0c;就是调用底层操作系统&#xff0c;第三方c语言的接口。 也就是说多线程和语言无关&#xff0c;是操作系统层面的东西。基本上每种语言都有自己的多线程实现方式。 java的前身就是c ja…

Mysql进阶(二)之事务篇

文章目录 面试题事务1.概念2.事务的四大特性ACID3.操作 并发事务问题1.脏读2.不可重复读3.幻读 事务隔离级别&#xff08;解决并发问题&#xff09;事务的原理1.redo log&#xff08;重做日志&#xff09;2.undo log&#xff08;回滚日志&#xff09;3.MVCC&#xff08;多版本并…

最优化问题matlab求解-fminsearch()和fmincon()函数的使用

matlab可以求解无约束最优化问题、有约束最优化问题和线性规划、二次型规划问题等&#xff0c;同时实现了最小二乘法的曲线拟合方法。matlab求解优化问题的步骤为&#xff1a; 写标准型描述目标函数&#xff1a;M-函数或匿名函数用fminunc()或fmincon()等函数求解原问题。检验…

centos openssl升级

centos openssl升级 一、下载二、&#xff08;升级&#xff09;安装 一、下载 执行命令下载&#xff1a; wget https://www.openssl.org/source/openssl-1.1.1f.tar.gz浏览器下载&#xff0c;访问官网网址&#xff1a;https://www.openssl.org/source &#xff08;1&#xff0…

汇编语言基础--nasm语法数据类型

dd //define 一个字节 例如&#xff1a;dd 100 dw //define 一个字 也就是两个字节 例如&#xff1a;dw 0xaa55 db //define 双字 也就是4个字节 例如&#xff1a;db 0x12345678 由于intel x86的架构采用小端存储因此二进制序列如下&#xff1a; 如果是16进制在后面输入h …

C++ 数据结构图(1)

1. 图的基本概念 图是由顶点集合及顶点间的关系组成的一种数据结构&#xff1a;G (V&#xff0c; E) &#xff0c;其中&#xff1a; 顶点集合 V {x|x 属于某个数据对象集 } 是有穷非空集合 &#xff1b; E {(x,y)|x,y 属于 V} 或者 E {<x, y>|x,y 属于 V &&…

【Spring Boot 事务】万字详解Spring Boot 事务,赶快跟随良辰一起去学习Spring Boot 事务吧! ! !

前言: 大家好,我是良辰丫,这篇文章我将带领大家一起去学习Spring Boot 事务文章,我们在学习数据库的时候已经接触过事务了,来跟随我的脚步一起来瞧一下Spring Boot 事务吧.&#x1f48c;&#x1f48c;&#x1f48c; &#x1f9d1;个人主页&#xff1a;良辰针不戳 &#x1f4d6;…

得物社区推荐精排模型演进

1.背景 得物社区是一大批年轻人获取潮流信息、分享日常生活的潮流生活社区。其中用户浏览的信息&#xff0c;进行个性化的分发&#xff0c;是由推荐系统来决策完成的。目前得物社区多个场景接入了推荐算法&#xff0c;包括首页推荐双列流、沉浸式视频推荐、分类tab推荐流、直播…

Tomcat的安装部署及优化

tomcat安装部署 tomcat安装部署 一、概述&#xff1a;1.tomcat介绍&#xff1a;2.tomcat核心组件&#xff1a;3.tomcat处理内部请求&#xff08;数据流向图&#xff09;4.tomcat服务部署&#xff1a; 二、虚拟主机配置&#xff1a;1.创建 chan 和 baek 项目目录和文件&#xf…

Python常见的开发工具合集对比

​ Python是一种功能强大且易于学习的编程语言&#xff0c;被广泛应用于数据科学、机器学习、Web开发等领域。随着Python在各个领域的应用越来越广泛&#xff0c;越来越多的Python开发工具也涌现出来。但是&#xff0c;对于新手来说&#xff0c;选择一款合适的Python开发工具可…

BurpSutie拓展插件推荐-漏洞扫描插件

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 fastjsonScan&#xff08;1&#xff09;工具介绍&#xff08;2&#xff09;下载地址&#xff08;3&#xff09;使用说明 02 SpringScan&#xff08;1&#xff09;工具介绍&#xff08;2&#xff09…

python接口自动化(十三)--cookie绕过验证码登录(详解)

简介 有些登录的接口会有验证码&#xff1a;短信验证码&#xff0c;图形验证码等&#xff0c;这种登录的话验证码参数可以从后台获取的&#xff08;或者查数据库最直接&#xff09;。获取不到也没关系&#xff0c;可以通过添加cookie的方式绕过验证码。&#xff08;注意&#x…

GPT模型训练实践(1)-基础概念

GPT 是 Generative Pre-trained Transformers 的缩写&#xff0c;一种先进的深度学习模型&#xff0c;旨在生成类人文本。GPT 的三个组成部分Generative、Pre-trained 和 Transformer&#xff0c;其解释如下&#xff1a; Generative生成&#xff1a;生成模型是用于生成新数据的…

【DASOU视频记录】Transformer从零详细解读

文章目录 来源transformer的全局理解位置编码多头注意力机制残差Batch NormalLayer NormalDecoder 来源 b站链接 transformer的全局理解 输入中文&#xff0c;输出英文 细化容易理解的结构&#xff0c;就是先编码&#xff0c;再解码 进一步细化的结构&#xff0c;就是多个编…

Python_闭包

目录 1.概念介绍 2.闭包初探 3.闭包陷阱 4.闭包的应用 4.1 潜在的问题 5.闭包的实现 闭包并不只是一个python中的概念&#xff0c;在函数式编程语言中应用较为广泛。理解python中的闭包一方面是能够正确的使用闭包&#xff0c;另一方面可以好好体会和思考闭包的设计思想。…

面试又问到:工作中发现的最有价值的bug?答不好offer要飞了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 这个问题&#xf…

SpringBoot--超时熔断器

需求背景 如果一个服务中有很多涉及需要服务间熔断的地方&#xff0c;就会出现N多下述代码&#xff1a; 1.N个fegnClient接口 FeignClient(name "hello-world-service", fallback HelloWorldFallback.class) public interface HelloWorldService {GetMapping(&q…

gma 2 教程(一)概述:3. 探索 GMA

组织方式 gma 整体按照库-模块-类/函数-&#xff08;方法/属性/子类&#xff09;的思路构建&#xff0c;详细思路如下所示&#xff1a; 整体架构 gma内主要模块与功能对应关系见下表&#xff1a; 模块名中文名对应主要功能io输入输出栅格/矢量数据输入输出模块crs坐标系统坐…

vim的使用方法及相关按键

目录 一、安装vim 二、vim的使用 1.打开vim 2.vim的四种模式使用 &#xff08;1&#xff09;命令模式&#xff08;快捷键的使用&#xff09; &#xff08;2&#xff09;编辑模式 &#xff08;3&#xff09;末行模式 &#xff08;4&#xff09;可视化模式 一、安装vim …