模板——KMP

【算法模板】KMP算法 简述 KMP算法:由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,串匹配算法,一般串都是指字符串。KMP是基于双指针算法的 应用:一个字符串在另外一个字符串中出现的位置和 循环节 一般地,被匹配的字符串叫主串,用来匹配主串的叫模式串 如果我们不用KMP,来查找一个字符串在另外一个字符串中第一次出现的位置,暴力求解时间复杂度是O(NM),用KMP优化查询时间复杂度是O(1),但是空间复杂度是O(N)。M和N分别是模式串和字串的大小。 KMP讲解 我觉得MOOC浙江大学数据结构讲的很不错, 阅读详情

 

资料 :https://blog.youkuaiyun.com/starstar1992/article/details/54913261/

#include <bits/stdc++.h>
using namespace std;
void cal_next(char *str, int *Next, int len) //下标必须是从0开始
{
	Next[0] = -1;
	int k = -1;
	for (int i = 1; i <= len-1; i++)
	{
		while (k > -1 && str[k + 1] != str[i])
			k = Next[k];
		if (str[k + 1] == str[i])
			k++;
		Next[i] = k;
	}
}
int KMP(char *str, int slen, char *ptr, int plen)
{
	int Next[100];
	cal_next(ptr, Next, plen);
	int k = -1;

	for (int i = 0; i < slen; i++) {
		while (k > -1 && ptr[k + 1] != str[i])
			k = Next[k];
		if (ptr[k + 1] == str[i])
			k++;
		if (k == plen-1) return i - plen + 1;
	}
	return -1;
}
int main()
{
	char str[1000], ptr[1000];
	cin >> str >> ptr;
	int ans = KMP(str,strlen(str), ptr, strlen(ptr));
	if (ans == -1) cout << "no find!" << endl;
	else cout << ans << endl;
	return 0;
}

 

算法学习之KMP(模板整理) 犹记当年学习C语言的字符串的时候那个悲情。。。 于是组队之后果断声明:鶸不玩字符串 然后将字符串丢给队友。。。 后来觉得吧,一些基础的东西还是要会的,比如KMP 粗浅的学了下KMP算法,也不敢瞎说什么,主要整理了下模板 学习记录: 主要看了刘大大的蓝书《算法竞赛入门经典--训练指南》 还有几篇博客:                            1. KMP算法详解 阅读详情

相关推荐

Aspen Plus下载教程Aspen Plus V14 保姆级安装步骤(附安装包)

26、在WlmAdmin界面中,依次点击【Subnet Servers】、【admin】、【Add Feature】、【From a File】、【To Server and its File】。35、在产品选择页面,勾选需要安装的所有产品(重要:不要勾选【Aspen Online(Plant Data)】),然后点击【File Location】。回到桌面,点击任务栏的【开始菜单】,在【所有应用】中找到【Aspen Plus V14】软件图标,将其拖到桌面上创建快捷方式。9、这里可以更改软件的安装位置。

ps_xiaowang的博客 1万+

kmp模板

关于KMP算法的思想,网上有很多,这个算法写起来简单,但理解起来还是有一定难度的,我的表达能力也说不清楚, 所有直接上我自己写的模板吧 #include #include using namespace std; void get_next(char* p, int* next) { int i, j; i = 0; j = -1; next[0] = -1; while

3127

最全软考高项工具技术总结(上)

第四版教材把工具和技术分为:数据收集技术、数据分析技术、数据表现技术、决策技术、沟通技巧、人际关系和团队技能、其他。我会按照上面的分类总结说明并标识他们用在哪些过程。小伙伴们可以通读理解做到有印象能选对应付上午选择,选几个深化用在下午论文的举例中。没必要背!

PM喵的窝 2045

KMP模板

//KMP模板 #include<bits/stdc++.h> using namespace std; void get_next(string t, int* next){ int i=0; int j=-1; next[0]=-1; while(i<t.length()){ if(j==-1||t[i]==t[j]){ i++,j++; next[i]=j; } else{ j=next[j]; } } } int kmp(string

weixin_52559308的博客 759

CTF实战:手把手教你用Python破解转轮机加密(附完整脚本)

本文详细介绍了如何使用Python逆向破解转轮机加密,特别针对CTF比赛中的Crypto类题目。通过解析转轮机加密原理、实战Python脚本编写及调试技巧,帮助参赛者快速掌握破解方法,提升在攻防世界等CTF比赛中的解题效率。

silver的专栏 1116

基于通义千问2.5-7B-Instruct的技术深度解析

通义千问2.5-7B-Instruct是一个基于Transformer架构的大型语言模型,具有70亿参数。它通过自注意力机制和前馈神经网络处理输入序列,能够捕捉长距离依赖关系,适用于多种NLP任务。微调是指在预训练模型的基础上,使用特定任务的数据进行进一步训练,以使模型更好地适应特定任务。微调可以显著提高模型在特定任务上的性能。通义千问2.5-7B-Instruct是一个强大的语言模型,适用于多种NLP任务。通过深入理解其架构、微调方法和核心代码,可以更好地应用于实际场景。

zhangjiaofa的专栏 1569

KMP模板(C++)

这是一个KMPC++的模板。相信很对同学看了大佬超详细的讲解(本文有链接),但还是不太清楚next数组的意义,或者为什么next[0]=-1,而不是1。Kmp的时间复杂度为什么是线性的

卖炫迈的小男孩的博客 7383

强化学习实战——OpenAI Gym环境配置+实战演示(win10)

遇到问题:无法安装pickle5原因是:python3.8与该包不兼容,必须降python3.7的版本。

LZL2020LZL的博客 4899

KMP模板代码

终于自己根据理解,手搓了一个自己的AC代码模板了,,,真不容易,,小细节还是有的,而且跟网上的模板普遍存的不是很一样,next[i]表示第i个位置匹配完了,第i+1个位置要匹配的位置 例:ababa  第二个a的next值是2,表示第二个a与第一个a可以匹配上,下一个要看的位置就是第一个b,是否匹配   不过只判是否存在字串,有函数可以用,也是很爽的。 模板代码: void getne...

AAAAAAAC的博客 273

PLC凸轮开关指令编程应用——控制算法

凸轮开关指令的作用是在PLC程序中根据凸轮开关(Cam Switch)的状态执行不同的操作。凸轮开关通常是机械式的开关装置,它的位置会随着机械运动的变化而改变。凸轮开关的状态可以用来检测机器的位置、角度或其他相关信息,从而触发相应的控制动作。总结起来,凸轮开关指令是PLC编程中常用的一种控制算法,通过检测凸轮开关的状态来触发相应的操作。本文将介绍凸轮开关指令的应用和相应的控制算法,并提供相关的源代码示例。在这个示例中,凸轮开关状态的值代表不同的位置,根据凸轮开关状态的不同,执行相应的动作。

LiJavascript的博客 1035

国密SSL通信的调试技巧

前面写了几篇国密开发相关的文章:解读国密非对称加密算法SM2啥?双证书?详解国密SM2的加密和解密详解国密SSL ECC_SM4_SM3套件详解国密SM2的数字签名这篇文章来聊一聊国密S...

云水木石 3206

几道KMP模板题

几道KMP的模板题 记录下KMP学习过程 注意:这里的模板s1是文本串s2是匹配串(模式串) HDU1711 Number Sequence链接 最小匹配位置 #include<iostream> #include<bits/stdc++.h> #include<queue> #include<vector> using namespace std; typedef long long ll; const ll maxn=1e6+5; const ll MOD

weach的博客 364

10步掌握!跨国企业在MySQL中实现数据主权的秘诀 vs. 传统方法,你选对了吗?

首先,我们要明确“数据主权”这一概念。简单来说,它指的是国家对其境内产生的所有类型的数据拥有绝对控制权。这意味着即使数据被存储在国外服务器上,只要该数据来源于某国,那么该国政府就有权对其进行监管。对于跨国公司来说,这就要求它们必须严格遵循不同国家关于数据保护的规定,如欧盟的GDPR、美国的《云法案》以及中国的《网络安全法》等。

java专栏 714

KMP模板和模板题目

package 算法模板; import java.util.*; public class KMP { public static void prefix_table(char pattern[],int prefix[],int n) {//找到表 prefix[0] = 0; int len = 0; int i = 1; while(i<n) { if(pattern[i] == pattern[len]) { len++; prefix[i]=len;

nankes的博客 198

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[kmp+模板] kmp模板

文章目录0. 前言1. kmp 0. 前言 kmp 模式匹配算法很牛,一般结合 kmp 的题目都不怎么简单,或是困难题目可以采用 kmp 的思想很快搞定,之前博文有写过 kmp· 算法原理,和简单实现了下,但是由于当时认识浅薄,大家看看就好。在此总结一个简单的 kmp 算法模板。 当时的博文:[杂谈] 12. BF、KMP、RK Algorithm 字符串匹配算法 1. kmp 这里是拿数组模拟栈。 模板代码: #include <iostream> using namespace std;

Y-puyu 的博客 1893

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

KMP算法模板

例题 SDUT OJ 数据结构实验之串一:KMP应用 #include <iostream> #include <cstdio> #include <cstdlib> #include <string.h> #include <algorithm> using namespace std; const int N = 11234567; int n,m; int Next[N]; int a[N],b[N]; void get_next(in

qq_45728527的博客 185

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

字符串处理、KMP模板:【模板】

KMP算法模板(next函数和kmp) 首先主要感谢一下:July算法从头到尾彻底理解KMP,讲得是究极详细,文底还有视频版讲解。还有河海大学ACM字符串专题讲解,两个小姐姐一真一假让我笑哭,文章中我主要用了这个视频里的模板,很好用,自己手模上三五遍也就懂得差不多了。 ...

EP的别三日 283

[c++模板] KMP

给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。 模板串P在模式串S中多次作为子串出现。 求出模板串P在模式串S中所有出现的位置的起始下标。 输入格式 第一行输入整数N,表示字符串P的长度。 第二行输入字符串P。 第三行输入整数M,表示字符串S的长度。 第四行输入字符串S。 输出格式 共一行,输出所有出现位置的起始下标(下标从0开始计数),整数之间...

Tizzi的博客 523
上一篇: 错误: 找不到符号 Scanner scan=Scanner(System.in); 符号
下一篇: 【模板】快速幂||取余运算
子言慕雨
博客等级 码龄9年 15粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值