个人模板 KMP

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

const int N = 1000000 + 10;
int t, n, m;
int la, lb;
char a[N], b[N];
int nex[N];

void get_nex(){
    int i = 0, j = -1;
    nex[0] = -1;
    while(i < lb){
        if(j == -1 || b[i] == b[j]){
            i++, j++;
            nex[i] = j;
        }
        else j = nex[j];
    }
}

int kmp(){
    get_nex();
    int i = 0, j = 0;
    while(i < la){
        if(j == -1 || a[i] == b[j]){
            i++, j++;
        }
        else j = nex[j];
        if(j == m) return i - m; ///继续匹配 j = 0;
    }
    return -1;
}

int main(){
    scanf("%d", &t);
    while(t--){
        scanf("%s%s", a, b);
        la = strlen(a);
        lb = strlen(b);
        printf("%d\n", 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浙江大学数据结构讲的很不错, 阅读详情

相关推荐

逻辑漏洞:水平越权、垂直越权靶场练习

水平越权和垂直越权是组织中常见的管理问题,指的是员工在组织中所拥有的权力和责任超出其职位所应具备的范围。 水平越权是指员工在同一级别的职位上超越了其同事的权力和责任范围,通常表现为某个员工在团队中承担了过多的任务或权力,导致其他同事感到不公平或不满。 垂直越权则是指员工在组织中超越了其职位等级的权力和责任范围,通常表现为员工在没有得到上级批准的情况下做出决策或行动,可能会导致组织内部的混乱和冲突。

qq_68163788的博客 2470

KMP算法之 模板+个人总结+好题

最后一个月的倔强,希望可以。 文章目录1. KMP 1. KMP 首先是next数组。kmp的核心无非于next数组: next[0]=−1/0next[0]=-1 / 0next[0]=−1/0 next[i]表示模式串的前i个字符的最长公共前后缀的长度next[i]表示模式串的前i个字符的最长公共前后缀的长度next[i]表示模式串的前i个字符的最长公共前后缀的长度 出现失配的时候,因为前 ...

放荡者的茶会 648

Unity 2D精灵点击交互实现:从BoxCollider 2D到Event Trigger的完整指南

本文提供了Unity 2D精灵点击交互的完整实现指南。通过详细拆解BoxCollider 2D与Event Trigger两大核心组件的协同工作原理,手把手教你为Sprite Renderer添加点击、悬停等事件响应。文章包含从基础配置到进阶优化、性能调试的实战步骤,帮助开发者高效实现游戏世界内的对象交互,是Unity 2D开发的实用教程。

ansible6ops的博客 301

【个人模板】 KMP

#include    using namespace std;      const int N = 1000000 + 10;   int t, n, m;   int la, lb;   char a[N], b[N];   int nex[N];      void get_nex(){       int i = 0, j = -1;       nex[0] = -1;       w

不忘初心,知行统一 258

Modscan32连接上了却没数据?一文拆解所有报错(从“Device NOT CONNECTED”到“Checksum Error”)

本文深入解析Modscan32连接异常问题,从状态栏报错到数据异常,提供系统化的诊断思路和解决方案。涵盖物理层问题、配置参数错位、端口占用冲突等常见故障,帮助工程师快速定位和解决Modbus通信中的各类错误。

weixin_30384217的博客 397

Xilinx PCIe IP核示例工程仿真流程与关键任务解析

本文详细解析了Xilinx PCIe IP核示例工程的仿真流程与关键任务。通过搭建仿真环境、解读初始化日志,并深入剖析TSK_TX_MEMORY_WRITE_32等核心任务的TLP报文生成与交互过程,帮助开发者掌握PCIe IP核的仿真调试方法,为实际硬件设计提供可靠的验证基础。

weixin_28314575的博客 507

nefu暑假集训5 KMP 个人模板+例题汇总

正文:前言:KMP算法用于匹配字符串,假设长字符串为s,需要匹配的字符串是p。KMP算法的基础思想是利用一个next[n]数组:next[i]对应的是:以下标i为结尾的连续子串,与以第一个字符开始的子串,相等的最大长度。该数组的作用是,当某一个下标的元素没有匹配成功时,可以通过该长度跳转到与 匹配成功的部分字符串的最后一个,开始下一次匹配。以下是我写的一些题目。

Wzh20060111的博客 848

PID算法(位置式pid算法和增量式pid算法)

PID 算法是闭环控制系统中常用的算法,PID 分别是 Proportion(比例)、Integral(积分)、Differential(微分)的首字母缩写。它是一种结合比例、积分和微分三个环节于一体的闭环控。

m0_57678852的博客 2万+

关于kmp的一点个人理解 poj3461 Oulipo (kmp模板题)

这个题就是先给子串,然后给母串,问子串在母串中出现的次数。 Oulipo Time Limit: 1000 ms / Memory Limit: 32768 kb Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e'....

qq_41780519的博客 216

Linux内核4.14版本——drm框架分析(1)——drm简介

本文介绍了DRM架构的发展历史、驱动框架以及简单示例,旨在帮助读者了解DRM架构的形成、功能流程实现。

phmatthaus的专栏 2556

Python爬虫分析二手交易平台商品定价合理性:基于多维度数据挖掘与机器学习

本文针对二手交易平台商品定价合理性问题,设计并实现了一个基于Python的多技术融合爬虫系统,结合Scrapy框架、Selenium自动化测试工具、Anti-Scraping对抗技术以及机器学习算法,对国内主流二手交易平台(闲鱼、转转等)进行大规模数据采集与分析。系统实现了商品信息的多维度采集、价格合理性模型构建、可视化展示等功能,为二手商品买卖双方提供科学的定价参考。实验结果表明,该系统能够有效识别定价异常商品,准确率达到89.7%,具有较高的实用价值。关键词:Python爬虫;二手交易;定价分析;

2201_76125261的博客 297

poj 2406 poj 1961 个人对吉大KMP模板的理解 KMP 基础题--找周期串

好佩服写kmp代码的人...   看死了终于看得有点明白了...... 学kmp先看两个比较好的总结 一是大牛matrix67的  http://www.matrix67.com/blog/archives/115/ 另一个是 http://www.cppblog.com/oosky/archive/2006/07/06/9486.html 这两个讲解非常好 摘一句我认为最重要的话

Pilgrim 1681

Python计算时间差的方法

使用datetime模块是Python内置的方法,使用timedelta对象可以更精确地计算时间差,而使用dateutil库则提供了更为灵活和方便的操作方式。我们可以使用datetime模块中的datetime类来表示一个具体的日期和时间,并进行相应的运算。在Python中,我们经常需要计算日期和时间之间的差异,例如计算两个日期之间的天数、小时数、分钟数等。Python提供了多种方法来计算时间差,下面我们将介绍其中的几种常用方法,并附上相应的源代码。在上面的代码中,我们使用了dateutil库中的。

学习使你进步。 2086

二分查找函数(lower_bound())+KMP模板+个人理解

【代码】二分查找函数(lower_bound())+KMP模板+个人理解。

i_xiang_la_shi的博客 233

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Camera2Demo

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

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

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

KMP模式匹配

KMP 这个算法非常妙,妙极了; 具体内容可以看此处就不多赘述了 如果想自学的请点击下列链接本篇只是我自己写写记记的 看毛片算法 模板题 看毛片 代码 #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define int long long #define debug puts("FUCK") const int N=1000010; int f[N],n,m,nex

7_26的博客 239

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

个人常用算法模板

#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod = 1e9 + 7; const ll maxn = 2e5 + 500; ///快速幂 ll quickpow(ll x, ll n) { ll ret = 1; while(n){ ...

qq_39696016的博客 240

[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 的博客 1892

KMP模板(C++)

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

卖炫迈的小男孩的博客 7383

KMP详细解释及KMP算法模板

KMP是什么,KMP解决什么类型的问题 KMP全称为Knuth Morris Pratt算法,是一种高效的字符串匹配算法,寻找一个字符串中是否包含另一个字符串,例如 char *s = "ababababcab"; char *p = "ababc"; s为模板串(主串),p为字串,在s中找到p的位置 ...

zhbbbbbb的博客 3293

【模板】kmp以及扩展kmp

kmp算法: 最佳博客: http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.html  ; 这里面kmp算法讲的比较详细,我主要在这写下自己的kmp模板以及需要注意的地方。 void getnext(int t) { int i=0,j=-1; while(i!=t) { if(j==-1||a

ten_three 1051

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

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

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

EP的别三日 283

【模板】KMP字符串匹配

KMP字符串匹配中next数组求法【模板】KMP字符串匹配 KMP字符串匹配中next数组求法 char* strstr(char*str,char*pattern);//字符串很小O(m.n) 子串里面一头一尾有可以匹配上的小串,指针不用每次都回溯到最最开头的位置。 匹配前,对模式串进行详细分析, 搞清楚next值的含义, p[0 ~ j]==p[ (i-j) ~i] ,即从p[0]开始长度为len=j+1,都有p[j]= p[i] 那么一旦p[i+1]与t[?]不相等了,t[?]下一个就要与p[j.

qq_51070956的博客 1262
上一篇: 个人模板 快速幂取模,矩阵快速幂,快速乘
下一篇: 个人模板 01背包
信鸦
博客等级 码龄10年 10粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值