首页 > 其他分享 >KMP

KMP

时间:2023-09-22 17:15:16浏览次数:31  
标签:10 int ne long KMP include

KMP

板子链接[kmp](831. KMP字符串 - AcWing题库)


#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int N=1e5+10,M=1e6+10;

char p[N],s[M];//p为模式串,s为模板串
int ne[N];//ne[j]含义:是p[1,j]中前缀与后缀相同的最大长度,大小等于前缀尾的下标

int main()
{
    int n,m;
    cin>>n>>p+1>>m>>s+1;//下标从1开始,若从0开始则有关值减1
    
    //求ne[]数组
    for(int i=2,j=0;i<=n;++i)//ne[1]=0
    {
        while(j&&p[i]!=p[j+1]) j=ne[j];
        if(p[j+1]==p[i]) j++;
        ne[i]=j;
    }
    
    //匹配操作
    for(int i=1,j=0;i<=m;++i)
    {
        while(j&&s[i]!=p[j+1]) j=ne[j];
        if(p[j+1]==s[i]) j++;
        if(j==n) {
            printf("%d ",i-n);
            j=ne[j];//继续匹配下一个子串
        }
    }
    return 0;
}



标签:10,int,ne,long,KMP,include
From: https://www.cnblogs.com/everflame/p/17722875.html

相关文章

  • 6.1 KMP算法搜索机器码
    KMP算法是一种高效的字符串匹配算法,它的核心思想是利用已经匹配成功的子串前缀的信息,避免重复匹配,从而达到提高匹配效率的目的。KMP算法的核心是构建模式串的前缀数组Next,Next数组的意义是:当模式串中的某个字符与主串中的某个字符失配时,Next数组记录了模式串中应该回退到哪个位置,以......
  • 6.1 KMP算法搜索机器码
    KMP算法是一种高效的字符串匹配算法,它的核心思想是利用已经匹配成功的子串前缀的信息,避免重复匹配,从而达到提高匹配效率的目的。KMP算法的核心是构建模式串的前缀数组Next,Next数组的意义是:当模式串中的某个字符与主串中的某个字符失配时,Next数组记录了模式串中应该回退到哪个位置,以......
  • 6.1 KMP算法搜索机器码
    KMP算法是一种高效的字符串匹配算法,它的核心思想是利用已经匹配成功的子串前缀的信息,避免重复匹配,从而达到提高匹配效率的目的。KMP算法的核心是构建模式串的前缀数组Next,Next数组的意义是:当模式串中的某个字符与主串中的某个字符失配时,Next数组记录了模式串中应该回退到哪个位置,......
  • Z函数(扩展KMP)
    Z函数(扩展KMP)用于解决以下问题:给定一个长度为n的字符串\(s\),求出一个数组\(z\),其中\(z_i\)表示字符串\(s(0,n-1)\)和\(s(i,n-1)\)的最长公共前缀。其中\(|s|<=2\times10^7\)。假设当前已经求出了\(z_0\)到\(z_{i-1}\),下一个要求\(z_i\):设\(p\)为\(1\)到\(i-1\)......
  • 便捷的视觉体验与乐趣:KMPlayer
    Kmplayer是一款来自韩国的影音播放器,Kmplayer(简称KMP)几乎可以播放您系统上所有的影音文件。KMPlaye通过各种插件扩展KMP可以支持层出不穷的新格式。这款软件强大的插件功能,能够直接使用winamp的音频,输入,视觉效果插件。只要你喜欢,可以选择使用不同解码器对各种格式进行解码。KMPla......
  • KMP字符串对比算法及next数组计算
    (注:该贴主要运用python实现该算法)先谈谈KMP算法吧。KMP算法的全称是Knuth-Morris-Pratt算法,它是用来进行字符串查找,即在某个主字符串里面找到某个特定子字符串。但是好像这个问题也可以直接暴力查找来完成啊,可是暴力查找的的缺点是不可忽视的:它的时间复杂度太高了!一旦遇......
  • 拓展kmp的应用
    Smiling&Weeping----我与月亮,进行了一次深夜谈话它与我谈论太阳,而我与它谈论你。 题目链接:P3435[POI2006]OKR-PeriodsofWords-洛谷|计算机科学教育新生态(luogu.com.cn)思路:其实也就是kmp......
  • KMP
    KMP1.作用用于字符串匹配,在文本串$S$中查找模式串$P$。(较短的或许直接调用函数?)2.过程(结合画图分析)KMP算法相较于朴素算法的精髓在个人看来在于不回退指针$i$,以及$Next[i]$(模式串在位置$i$以前的子串的最长公共前后缀)。为什么不用回退$i$?在$i$(匹配失败的位置)之......
  • KMP算法详解
    呼——终于看懂了KMP——磕了三天了。题目直达Q:KMP是干什么的?是查找字符串用的,可以查找到\(S2\)字符串在\(S1\)字符串中出现的位置(当然,你可以统计出次数)。Q:那复杂度是多少的?通常,我们认为他的复杂度是\(O(|S1|)\),虽然有点常数。常规的的比较方法是直接比较,枚......
  • kmp的简单应用
    Smiling&Weeping----我只为你一个人写过月亮 题目链接:P4824[USACO15FEB]CensoringS-洛谷|计算机科学教育新生态(luogu.com.cn)题目思路:编码时,在正常的kmp中加入以下两条:1.定义一个和S一样大的数组记录每个字符对应的j值,用于删除一个......