首页 > 编程语言 > 详细

P3375 【模板】KMP字符串匹配——kmp算法

时间:2019-10-17 22:28:13      阅读:64      评论:0      收藏:0      [点我收藏+]

先上一波题目 https://www.luogu.org/problem/P3375

kmp模板 看了好久才想起来是个什么东西qwq

技术分享图片
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
#include<iostream>
using namespace std;
const int M=2e6+7;
int f[M],len1,len2;
char s1[M],s2[M];
void getfail(){
    for(int i=1;i<len2;i++){
        int now=f[i];
        while(now&&s2[i]!=s2[now]) now=f[now];
        f[i+1]=(s2[i]==s2[now]?now+1:0);
    }
}
int main(){
    scanf("%s %s",s1,s2);
    len1=strlen(s1); len2=strlen(s2);
    getfail();
    int now=0;
    for(int i=0;i<len1;i++){
        while(now&&s2[now]!=s1[i]) now=f[now];
        if(s2[now]==s1[i]) now++;
        if(now==len2){printf("%d\n",i-now+2); now=f[now];}
    }
    for(int i=1;i<=len2;i++) printf("%d ",f[i]); puts("");
    return 0;
}
View Code

 

P3375 【模板】KMP字符串匹配——kmp算法

原文:https://www.cnblogs.com/yourinA/p/11695442.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!