首页 > 其他分享 >KMP

KMP

时间:2025-01-22 14:56:22浏览次数:1  
标签:匹配 int void KMP ++ 回溯

KMP算法。其核心思想是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数,以达到快速匹配的目的。$KMP$算法的时间复杂度为$O(m+n)$,其中$m$是模式串的长度,$n$是文本串的长度

void zwpp(int n)//自我匹配
{
    p[1]=0;
    for(int i=1,j=0;i<n;i++)
    {
        while(j>0&&b[i+1]!=b[j+1])      //不匹配,回溯
            j=p[j];                     
        if(b[i+1]==b[j+1])              //j+1 匹配,j -> j+1
            j++;
        p[i+1]=j;                       //记录
    }
}
void KMP(int n)
{
    for(int i=0,j=0;i<n;i++)
    {
        while(j>=0&&b[j+1]!=a[i+1])     //不配配,回溯
            j=p[i];
        if(b[j+1]==a[i+1])              //匹配,b的下一个
            j++;
        if(j==n)                        //结束了,记录答案,回溯再找
        {
            ans++;
            j=p[i];
        }
    }
}
/*a,b字符串从下标1开始*/

标签:匹配,int,void,KMP,++,回溯
From: https://www.cnblogs.com/-include-lmt/p/18685978

相关文章

  • ExKMP Z函数
    更新日志20250122:开工。思路我们定义\(z_i\)表示从\(i\)开始的后缀与整个字符串的最长公共前缀长度。考虑它的作用,假如我们要字符串匹配,将模式串接在前面并以特殊字符分隔,然后\(O(n)\)遍历原串,当\(z_i=|T|\)(\(T\)为模式串)时,这个位置就是一个匹配上的位置的开始。......
  • 2025dsfz集训Day7: KMP与Trie树
    Day7:KMP与Trie树KMP算法\(KMP(Knuth–Morris–Pratt)\)是一个字符串匹配算法,于1977年由上述三人共同发表。在线性的时空复杂度内解决字符串匹配。字符串匹配给定两个字符串\(s,t\)(通常来讲我们管较短的串叫做“模式串”,长的叫“匹配串”。我们的任务是在长串内找到......
  • 代码随想录 字符串 test 6(KMP,超详细)
    28.找出字符串中第一个匹配项的下标-力扣(LeetCode)一暴力:        以主串中的每个字符为起点,每次匹配从当前主串的起点和子串的首位开始匹配:匹配成功:返回本次匹配的主串起点。匹配失败:以主串的下一个字符作为新起点,重新尝试匹配。时间复杂度为o(m*n)(m为主串长度,n......
  • KMP算法
    KMP算法kmp算法主要解决的问题就是字符串匹配,本篇文章节选自我的LeetCode字符串,在此单独记录一下kmp算法题1:字符串匹配寻找匹配子串,并返回起始索引classSolution:defstrStr(self,haystack:str,needle:str)->int:start=-1i=0......
  • 字符串匹配(BP&KMP算法)
    BP&KMP算法字符串匹配前言BP算法(基础)引文KMP算法(进阶)伪代码描述next数组递归求解思路算法思路详解KMP算法实现及测试(先做在看!)字符串匹配前言本文是基于懒猫老师的课程----BP&KMP所写,在观看本文之前最好配合视频或者PPT食用更佳,地址我附在下面:https://www.bilibi......
  • KMP算法(史上最清晰版本,每一步思路都仔细剖解)
    用一个更形象和详细的示例来说明如何构造next(又称部分匹配表、失配表)。假设我们的模式串是:pattern="aabaaac"我们希望为这个模式串构造一个数组next[],其中next[i]表示[0…i]这个子串中“前缀”与“后缀”能够匹配的最长长度。换句话说,next[i]是“pattern[0…i]......
  • 瑞芯微rk3568平台 openwrt系统适配ffmpeg硬件解码(rkmpp)
    瑞芯微rk3568平台openwrt系统适配ffmpeg硬件解码(rkmpp)RK3568及rkmpp介绍编译安装mpp获取源码交叉编译安装libdrmlibdrm-2.4.89make方式编译(cannotfind-lcairo,不推荐)下载源码编译编译错误:multipledefinitionof`nouveaudebug‘错误cannotfi......
  • 字符串匹配:BF算法 | KMP算法 | Z函数
    什么是字符串匹配?给你一个字符串str,问你这个字符串中是否包含字符串sub。例如:str="abcdef",sub="cdef",问str中是不是有sub。一.BF算法BF算法(BruteForce),翻译成中文就是暴力匹配算法。暴力匹配其实很好想,不就让我们判断str中有没有sub嘛,直接一个一个来。定义两个指针,一个指st......
  • 301 字符串匹配例题 exkmp
    //301字符串匹配例题.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*http://oj.daimayuan.top/course/22/problem/908给你两个字符串a,b,字符串均由小写字母组成,现在问你b在a中出现了几次。输入有多组数据,第一行为数据组数T,每组数据包含两行输入......
  • KMP算法
    更新日志2024/12/21:开工。作用KMP算法本质作用是求字符串前缀的最长border。border:同时是一个字符串前缀和后缀的字符串,称为前者的border。常见的,我们可以使用它进行字符串匹配。思路假如我们要在\(s_1\)中匹配\(s_2\)。我们使用nxt数组储存\(s_2\)所有前......