算法笔记——KMP字符串匹配

[算法导论笔记]--字符串匹配与KMP算法 字符串匹配的形式化定义:假设文本是一个长度为n的数组T[1,2…n],而模式是一个长度为m的数组P[1,2…m],其中m<=n,进一步假设P和T的元素都来自一个有限的字母集Σ的字符,例如Σ={0,1}或者Σ={a,b…z},字符数组P和T通常称为字符串。 如下图所示,如果0<=s<=n-m,并且T[s+1…s+m]=P[1…m],那么称模式P在文本T中出现,并且偏移为s。如果P... 阅读详情

视频地址:https://b23.tv/BV1234y1y7pm
https://b23.tv/BV1Px411z7Yo
KMP算法步骤:
1、输入A,B串,求A串中B串的数量
2、求出B串的next数组(kmp数组)
3、同样的方法开始匹配AB串

#include<iostream>
#include<cstring>
using namespace std;
#define maxn 1000010
/*
KMP算法步骤:
1、输入A,B串,求A串中B串的数量
2、求出B串的next数组(kmp数组)
3、同样的方法开始匹配AB串
*/
int kmp[maxn],lena,lenb;
char a[maxn],b[maxn];
int main()
{
    cin>>b+1;
    cin>>a+1;
    lena=strlen(a+1);
    lenb=strlen(b+1);
    kmp[1]=0;//一个字符没有最长公共前后缀
    for(int i = 2,len = 0;i <= lena; i ++){
        while(len>0 && a[i] != a[len + 1])len = kmp[len];
        if(a[i] == a[len + 1])len++;
        kmp[i] = len;
    }
    for(int i = 1,len = 0;i <= lenb;i ++){
        
        while(len > 0 && (len == lena || b[i] != a[len+1]))len = kmp[len];
        if(b[i] == a[len + 1])len ++;
        if(len == lena){
            cout<<i-lena+1<<endl;
            //len = kmp[len];
        }
    }
    //i是在串尾的指针,求哪个子串的最长公共前后缀就在哪个子串的末尾
    //len(或者写成j)可以理解为目前最长公共前后缀的长度
    for(int i=1;i<=lena;i++){
        cout<<kmp[i]<<' ';
    }
}
从IPv6到Tomcat:彻底解决127.0.0.1拒绝连接的完整指南 本文提供了从IPv6到Tomcat的全面指南,帮助开发者彻底解决127.0.0.1拒绝连接的问题。涵盖网络协议栈、服务配置、端口管理等多个层面的排查方法,特别针对Tomcat服务提供了专项解决方案,确保开发者能够快速定位并修复连接问题。 阅读详情

相关推荐

宝塔面板+pbootCMS建站全流程:从服务器选购到上线优化(附常见问题排查)

本文提供了一份详尽的宝塔面板与pbootCMS建站实战指南。内容涵盖从云服务器选购、宝塔面板部署与安全加固,到pbootCMS安装、权限配置、数据库连接等核心步骤。同时深入讲解了PHP环境优化、Nginx伪静态设置、缓存开启等性能与SEO优化技巧,并附有常见问题排查与后期维护建议,帮助用户高效、稳健地完成专业网站构建。

e4f5g6h的博客 658

ab串【字符串】【前缀和】

ab串 【问题描述】 给定一个由字符’a’和字符’b’组成的字符串,可以删除若干字符,使得剩下来的字符串满足前后段为a,中间段为b(aaa…aaabbbb…bbbbaaa…aaa),区段可以没有字符(ba,ab,b,aa都是合法的),求最长剩下字符串的长度。 【输入形式】 输入为一行一个长度不超过5000的非空字符串,字符串仅由字符’a’和字符’b’组成。 【输出形式】 输出为一个整数,表示符合要求的最长剩下字符串长度 【样例输入1】 abba 【样例输出1】 4 【样例输入2】 bab 【样例输出2】.

chamberling的博客 2164

Android定位权限全解析:从基础配置到后台持续定位的完整解决方案

本文全面解析Android定位权限体系,从基础配置到后台持续定位的完整解决方案。涵盖LocationManager和FusedLocationProviderClient等主流API的对比选型,详细讲解动态权限申请、精确定位与模糊定位的智能切换,以及Android 10+的后台定位适配策略。帮助开发者构建兼顾精准度与电量友好的定位方案,适用于导航、运动轨迹记录等多种场景。

weixin_29310605的博客 604

KMP子字符串匹配算法学习笔记

注意这个next数组就根据模式串求取的。使用next数组来匹配有了next数组,就可以根据next数组来 匹配文本串s,和模式串t了。注意next数组是新前缀表(旧前缀表统一减一了)。匹配过程动画如下:放码过来下文统称haystack为文本串, needle为模式串。

2401_89213103的博客 1786

模电实验室:手把手教你调试共射放大电路静态工作点(避免波形失真)

本文详细介绍了共射放大电路静态工作点的调试方法,帮助避免波形失真问题。从实验准备、电路搭建到静态工作点测量,提供了实用的电阻选值策略和常见波形失真解决方案,适合电子相关专业学生和硬件工程师参考学习。

weixin_42531128的博客 375

高速PCB差分对布线仿真实战案例

差分对布线是高速PCB设计的关键环节,直接影响信号完整性与EMI性能。本文结合实际项目,详解等长控制、阻抗匹配、间距优化等核心技巧,并通过仿真工具验证眼图、串扰和时序裕量,助力工程师规避常见高速pcb设计陷阱。

weixin_29092787的博客 349

字符串匹配KMP算法设计C语言,KMP字符串匹配算法笔记

网上有很多解释KMP算法的文章,A_B_C_ABC的这篇很详细,反复看了好几遍,总算理解了个大概,但是总觉得没那么爽快。其实,一种算法各人有各人的理解方法,找到适合自己理解的才容易记住。下面是我对这个算法的一些理解:最普通的字符串匹配算法就不记了,简单贴一下代码int strstr(char *sub, char* str){int i=0;char *p=str, *q=sub;while(*(...

weixin_35087326的博客 244

大话西游2单机版V8一键架设教程:5分钟搞定GM权限和仙玉修改(附完整物品代码表)

本文详细讲解了大话西游2单机版V8的一键架设教程,包括5分钟快速配置GM权限、仙玉修改及物品代码使用技巧。通过分步指导和服务端配置详解,帮助玩家轻松掌握游戏管理功能,重温经典回合制体验。附完整物品代码表,助你快速获取稀有道具和神兽。

weixin_42557830的博客 1227

字符串的模式匹配——KMP算法笔记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、逐位比较匹配--Brute Force设计思路二、使用步骤1.引入库2.读入数据二、KMP算法总结 前言 字符串的匹配问题指的是在主串S中寻找一个与模式串P完全相同的子串,称为字符串模式匹配 一、逐位比较匹配–Brute Force 设计思路 以主串S的第一位字符为起点,每次与模式串P进行逐位的比较。若当前比较的字符相等,则比较下一位,完全相等时返回S此时的比较起点。若当前比较的字符不相等,则S的比较起点向后挪一位,从主

weixin_45915410的博客 342

Memory SystemsCache, DRAM, Disk翻译学习DRAM部分(二)

DRAM 的发展史

qq_33473931的博客 995

用GraphPad Prism直出单细胞亚群堆叠柱状图

用GraphPad Prism直出单细胞亚群堆叠柱状图

fivehuge的博客 4195

字符串匹配KMP算法(笔记)

next[i] next[i]记录字符串str[0,i]相等的最长前后缀的前缀的最后一位下标 例如有一字符串 str="abab" 字符串前缀有 “a”,“ab”,"aba" 字符串后缀又 “b”,“ab”,"bab" 那么str的相等的最长前后缀分为别 “ab”,“ab”,前缀"ab"最后一个字符’b’的下标为1,所以字符串str的next[3]=1。 next[i]计算需要排除自身,即前、后缀不能选自己。 变量j的含义 我们引入变量j的主要目的是在计算next[i]时,使用next[i-1]的成果,

Eumenides_Suki的博客 334

YOLO26改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块

本文记录的是。YOLO26主要用于轻量化应用部署,相关轻量化改进与其整体架构非常适配。StarNet设计简洁,没有复杂的设计和精细调整的超参数,仅是一个 4 阶段的分层架构。并且其中能够在低维空间计算的同时考虑极高维的特征这一特性,进而提高模型精度。本文在替换骨干网络中配置了原论文中的starnet_s1starnet_s2starnet_s3和starnet_s4七种模型,以满足不同的需求。

Limiiiing的博客 1091

字符串匹配KMP算法学习笔记

KMP算法学习笔记

闫昊的博客 325

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

c++ kmp算法字符匹配_LeetCode笔记:字符串匹配——KMP算法

LeetCode第28题:实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", needle ...

weixin_39806808的博客 174

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数据结构 kmp字符串匹配_LeetCode笔记:字符串匹配——KMP算法

LeetCode第28题:实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", needle ...

weixin_39735247的博客 265

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

算法笔记--字符串匹配KMP算法,简单易懂

KMP算法 KMP算法看懂了就会感觉挺容易的,思路也很清晰。看不懂就会稀里糊涂。 先说什么是字符串匹配 字符串匹配。简单来说,就是给你两个字符串,寻找其中一个字符串是否包含另一个字符串,如果包含,返回包含的起始位置。 比如下面两个字符串: string s1="bacbababadababacacabc"; string s2="ababaca"; s1中包含s2,在s1下标10处; bacbababadababacacabc 再说说KMP算法 看完字符串匹配,你可能想到的可能是拿s1的首位与s2的首位比

Lzh4792的博客 300

java学习笔记——KMP字符串匹配算法

目录字符串匹配暴力解法KMP算法匹配字符串算法核心思想next数组 字符串匹配暴力解法 暴力解法的思想很简单,规定两个指针,一个指向目标字符串(target)规定为指针j,一个指向待匹配字符串(source)规定为指针i,需要在source中找到target字符串并返回开头索引。 如果指针i和j指向的字符相同,就同时向后移动 一旦两个指针所指的字符串不相同,指针i就重新指向target的开头,而指针j则指向source开始匹配的下一个字符,重复以上步骤。 该解法虽然能够解决字符串的匹配

qq_36334929的博客 200

算法学习笔记 - 字符串匹配(KMP匹配)

前言 KMP 算法,又称模式匹配算法,能够在线性时间内判定字符串 A[1~N] 是否为字符串 B[1~M] 的子串,并求出字符串 A 在字符串 B 中各次出现的位置。 最朴素的做法是,尝试枚举字符串 B 中的每个位置 i,把字符串 A 与字符串 B 的后缀 B[i~M] 对齐,向后扫描逐一比较 A[1] 与 B[i],A[2] 与 B[i+1]...是否相等。我们把这种过程称为 A 与 B 尝试进行“匹配”。这个时间复杂度是 O(NM) 的 具体步骤 对字符串 A 进行自我“匹配”,求出一个数组 n

haobowen的博客 582

学习笔记:KMP字符串匹配算法

前言 其实很早就学了,不过还是感觉很迷。但做到了NOIP2020的T2,只有学一下了。 原理 KMP是由3名数学家搞出来的算法,KMP也就是这3位的首字母。 模板传送门luoguP3375 首先看题目要求给定2个字符串,要求其中的一个字符串在另一个字符串里出现的次数。 容易想到暴力: 直接枚举2个串,如果不同,就将去匹配的串从头开始重新从匹配失败的位置继续找。 最坏的时间复杂度是:O(nm) 这个暴力算法叫做BF算法。 我们发现这个算法最主要的问题是每次从头开始重新匹配,其实可以从其中的某个地方开始找,

pigonered的博客 325

KMP字符串匹配算法笔记

网上有很多解释KMP算法的文章,A_B_C_ABC(见附件)的 这篇很详细,反复看了好几遍,总算理解了个大概,但是总觉得没那么爽快。其实,一种算法各人有各人的理解方法,找到适合自己理解的才容易记住。下面是我对 这个算法的一些理解: 最普通的字符串匹配算法就不记了,简单贴一下代码...

weixin_33757911的博客 84

【超好懂的字符串算法笔记】KMP及其拓展——字符串匹配问题

title : KMP算法及扩展 date : 2021-8-27 tags : ACM,字符串 author : Linno 简介 KMP算法主要解决子串在母串中的匹配定位(pattern)问题。 可以在O(n+m)的复杂度下找到匹配。 思考 为什么要用kmp 对于在长度为n的母串搜索长度为m的子串问题,双指针暴力枚举的时间复杂度可以达到O(nm)O(nm)O(nm),事实上,指针一格格走会徒增很多没必要的计算。失配时,如果我们能将子串中当前匹配的字符移动到上一次出现的位置,那么就可以减少很多计算。.

SC_Linno的博客 255

【KMP】【字符串】KMP字符串匹配算法 学习笔记

一、简介 KMP是由Knuth、Morris和Prat发明的字符串匹配算法,它的时间复杂度是均摊\(O(n+m)\)。其实用Hash也可以做到线性,只不过Hash存在极其微小的难以避免的冲突。于是就有了KMP。 KMP算法用作模式串匹配,可以找到一个长为\(m\)的模式串在一个长为\(n\)的主串中出现的次数和位置。 二、朴素算法(\(O(nm)\)) 实际上是枚举...

weixin_30515513的博客 102

字符串匹配-KMP算法学习笔记

...

禅境花园 581

笔记:KMP算法(解决字符串匹配问题)

//解决字符串匹配问题,除了暴力匹配,还可以使用KMP匹配算法。 Void main(){ int next[10]; int pos; S[0]=strlen("abcabaaabaabcac");//将字符串的字符数保存在S[0]里 strcpy(S+1,"abcabaaabaabcac"); T[0]=strlen("abaabcac"); ...

IT_boy_Jason的博客 345

【数据结构--笔记03】字符串匹配的KMP算法

字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。 这种算法不太容易理解,网上有很多解释,但读起来都很

西红是番茄 524
上一篇: 算法笔记——矩阵乘法,矩阵快速幂,矩阵加速(模块化模板)
下一篇: 广东工业大学acm校赛总结(基础差的人的自我觉悟)
kai_wei_
博客等级 码龄7年 14粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值