【模板】KMP算法笔记

练习链接:【模板】KMP - 洛谷

题目:

输入
ABABABC
ABA
输出
1
3
0 0 1 

思路:

        根据题意,用到的是KMP算法,KMP算法思想是通过一个一个匹配首字母的原理进行整个匹配效果,当某个首字母不匹配的时候,就跳跃相差对应的字符串长度,达到优化检索的效果。

所以 ne 数组是用来存储相应字符所对应的下标的。

注意:我们应该先预处理用于匹配的字符串 ne 数组,可以理解为先预处理 短的字符串 的 ne数组

代码详解如下:

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
#include <unordered_map>
#define endl '\n'
#define YES puts("YES")
#define NO puts("NO")
#define umap unordered_map
#define All(x) x.begin(),x.end()
//#pragma GCC optimize(3,"Ofast","inline")
#define IOS std::ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
const int N = 2e6 + 10;
string p,t;int ne[N],n,m;
inline void KMP()
{// 预处理模式串,即短的字符串for(int i = 2,j = 0;i <= n;++i){// 匹配相对应的字符下标jwhile(j && p[i] != p[j + 1]) j = ne[j];if(p[i] == p[j + 1]) ++j;ne[i] = j;	// 更新ne数组}// 开始 KMP 匹配  t 字符串相应位置 与 p 字符串匹配是否一致for(int i = 1,j = 0;i <= m;++i){while(j && t[i] != p[j + 1]) j = ne[j];if(t[i] == p[j + 1]) ++j;// 当我们的 j 下标与 模式串p 长度相同的时候,说明匹配成功if(j == n){// 输出相应位置,为当前下标 - 字符串长度为  所匹配成功的相应下标cout << i - j + 1 << endl;j = ne[j]; 	// 更新 j 下标,获取下一个相应字符的 ne数组}}}inline void solve()
{cin >> t >> p;n = p.size();m = t.size();p = " " + p;t = " " + t;KMP();	// KMP 算法// 输出 ne 数组for(int i = 1;i <= n;++i){cout << ne[i] << ' ';}
}int main()
{
//	freopen("a.txt", "r", stdin);
//	IOS;int _t = 1;
//	cin >> _t;while (_t--){solve();}return 0;
}

最后提交:

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

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

相关文章

系列十七、各种各样的bean

一、Spring bean 1.1、概述 一句话&#xff0c;被Spring容器管理的bean就是Spring bean。 二、Java bean VS Spring bean 2.1、概述 Java bean是程序员自己new 出来的&#xff0c;Spring bean是Spring工厂创建出来的。 三、配置bean的方式 3.1、概述 所谓配置bean&#xff0…

jetson nano SSH远程连接(使用MobaXterm)

文章目录 SSH远程连接1.SSH介绍2.准备工作3.连接步骤3.1 IP查询3.2 新建会话和连接 SSH远程连接 本节课的实现&#xff0c;需要将Jetson Nano和电脑保持在同一个局域网内&#xff0c;也就是连接同一个路 由器&#xff0c;通过SSH的方式来实现远程登陆。 1.SSH介绍 SSH是一种网…

魔珐科技:3D虚拟人AIGC原生产品,助力全新商业机遇

11月28日-29日&#xff0c;WISE2023 商业之王大会在北京国际会议中心成功举办。此次大会以“太阳照常升起&#xff08;The Sun Always Rises&#xff09;”为主题&#xff0c;活动汇聚了全商业领域知名企业&#xff0c;围绕前沿趋势&#xff0c;共话商业创新之策。 在本次论坛…

OSEK OS任务调度的底层逻辑

先参考 FreeRTOS的任务触发底层逻辑 简述RTOS任务调度底层逻辑 AUTOSAR-OS的调度机制-调度表&#xff08;没理解透&#xff0c;继续更新&#xff09; OSEK与FreeRTOS在任务调度上最大的区别在于&#xff0c;FreeRTOS是基于全抢占任务调度和时间片轮转调度机制&#xff0c;具有…

开关电源基础而又硬核的知识

1.什么是Power Supply? Power Supply是一种提供电力能源的设备&#xff0c;它可以将一种电力能源形式转换成另外一种电力能源形式&#xff0c;并能对其进行控制和调节。 根据转换的形式分类&#xff1a;AC/DC、DC/DC、DC/AC、AC/AC 根据转换的方法分类&#xff1a;线性电源、…

使用JMeter安装RabbitMQ测试插件的步骤

整体流程如下&#xff1a;先下载AMQP插件源码&#xff0c;可以通过antivy在本地编译成jar包&#xff0c;再将jar包导入JMeter目录下&#xff0c;重启JMeter生效。 Apache Ant 是一个基于 Java 的构建工具。Ant 可用于自动化构建和部署 Java 应用程序&#xff0c;使开发人员更轻…

Locust单机多核压测,以及主从节点的数据通信处理!

一、背景 这还是2个月前做的一次接口性能测试&#xff0c;关于locust脚本的单机多核运行&#xff0c;以及主从节点之间的数据通信。 先简单交代下背景&#xff0c;在APP上线之前&#xff0c;需要对登录接口进行性能测试。经过评估&#xff0c;我还是优先选择了locust来进行脚…

如何使用内网穿透实现无公网ip环境访问VScode远程开发

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

msvcp140.dll的解决方法有哪些。详细解析五种可以修复msvcp140.dll丢失的方法

引言&#xff1a; 在日常使用电脑的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“msvcp140.dll丢失”。那么&#xff0c;什么是msvcp140.dll文件&#xff1f;它的作用是什么&#xff1f;当它丢失时会对电脑产生什么影响&#xff1f;本文将详细介绍…

软件测试jmeter基本使用

1安装与配置 1.jdk下载 下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#jdk18-windows&#xff08;压缩包中会给&#xff09; 2.jmeter下载 Apache JMeter - Download Apache JMeter&#xff08;压缩包中有&#xff09; 3.操作教学 打开软件后新…

C# PIE-SDK二次开发界面汉化方法

那些最好的程序员不是为了得到更高的薪水或者得到公众的仰慕而编程&#xff0c;他们只是觉得这是一件有趣的事情&#xff01; C# PIE-SDK二次开发界面汉化方法 &#x1f340;前言&#x1f338;配置方法&#x1f355;拷贝语言包文件夹&#x1f354;增加窗体代码&#x1f35f;运行…

什么是PDN的交流阻抗?

什么是PDN的交流阻抗&#xff1f; 在电力电子领域&#xff0c;PDN&#xff08;Power Distribution Network&#xff09;的交流阻抗是一个重要的概念&#xff0c;它反映了PDN在交流电源和负载之间传输电能的能力。了解PDN的交流阻抗对于优化电源设计、提高系统性能和可靠性具有重…

SSM SpringBoot vue考勤信息管理系统

SSM SpringBoot vue考勤信息管理系统 系统功能 登录 注册 个人中心 部门信息管理 上班时间管理 考勤信息管理 员工信息管理 签到管理 请假信息管理 加班申请管理 出差申请管理 开发环境和技术 开发语言&#xff1a;Java 使用框架: SSM(Spring SpringMVC Mybaits)或Spring…

珠宝模具3d仿真沉浸式交互展示更易分享传播

3D云展会经过近几年的蓬勃发展&#xff0c;迅速受到参展企业和客户的多方认可和支持&#xff0c;那么随着市场再度恢复&#xff0c;各种展会络绎不绝&#xff0c;想要快速打造一个逼真的线上3D云展会成为企业刚需。3D云展会线上搭建平台是web3d开发公司深圳华锐视点根据领先的三…

CSS 在性能优化方面的实践

前言 CSS&#xff08;层叠样式表&#xff09;是一种用于描述网页外观和格式的语言。随着网页变得越来越复杂&#xff0c;CSS文件的大小也随之增加&#xff0c;这可能会对网页性能产生负面 .box {width: 100px;height: 100px;transition: transform 0.3s; }.box:hover {transf…

全网最最全的Jmeter接口测试:jmeter_逻辑控制器_交替控制器Jmeter(22):jmeter_逻辑控制器_交替控制器

交替控制器 该控制器包含的取样器步骤在每次循环中交替执行 交替控制器指每次运行一次时在交替控制器下的采样器只执行一个&#xff1b;如下图&#xff1a; 忽略子控制模块&#xff1a;如果勾选此项,交替控制器将子控制器像单一请求元素一样&#xff0c;一次 只允许一个请求/…

Java中的JMX的使用

文章目录 1. 定义和存在的意义2. 架构2.1 Instrumentation2.2 JMX Agent2.3 Remote Management 3. 启动和连接3.1 注册MBean3.2 有两个方式启动JMX Agent3.3 Remote Management(客户端) 4. MBeanServerConnection使用4.1 列出所有的MBean4.2 列出所有的Domain4.3 MBean计数4.4 …

算法:Java计算二叉树从根节点到叶子结点的最大路径和

要求从根节点到叶子结点的最大路径和&#xff0c;可以通过递归遍历二叉树来实现。对于二叉树中的每个节点&#xff0c;我们都可以考虑包含该节点的最大路径和。在递归的过程中&#xff0c;我们需要不断更新全局最大路径和。 具体的思路 递归函数设计&#xff1a; 设计一个递归函…

常用的设计模式

常用的设计模式&#xff1a; 一、单例模式 java中单例模式是一种常见的设计模式&#xff0c;单例模式的写法有好几种&#xff0c;这里主要介绍三种&#xff1a;懒汉式单例、饿汉式单例、双重检查锁定 1、单例模式有以下特点&#xff1a;   a、单例类只能有一个实例。   b…

36.JavaScript补完计划:typescript

点赞收藏加关注&#xff0c;你也能住大别墅&#xff01; 一、什么是typescript 二、应用场景 我认为JavaScript的特点就是在于它强大的延展性&#xff0c;不仅蔓延到了后端&#xff0c;而且也逐渐成为代码世界无法被忽视的存在。那么&#xff0c;编写js代码时我们都会经常遇到…