其他分享
首页 > 其他分享> > 洛谷 P3375 【模板】KMP字符串匹配

洛谷 P3375 【模板】KMP字符串匹配

作者:互联网

题目链接

本题是kmp的模板题。最后一行将1~n的next数组输出即可。

kmp我是通过这个博客和kuangbin的acm模板然后搞清楚的。

一开始觉得还挺麻烦的。多练几次就好了qwq

AC代码如下:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<vector>
#define MAXN 1000005
using namespace std;
typedef pair<int,int> pii;
typedef long long ll;
char s1[MAXN],s2[MAXN];
int next1[MAXN],len1,len2;
void Get_next(){
    int i,j;
    next1[0]=i=-1;//前缀 
    j=0;//后缀 
    while(j<len2){
        if(i==-1||s2[i]==s2[j])
            next1[++j]=++i;
        else
            i=next1[i];
    }
}
int main(){
    scanf("%s%s",s1,s2);
    len1=strlen(s1),len2=strlen(s2);
    Get_next();
    int i=0,j=0;
    while(i<len1){
        if(-1==j||s1[i]==s2[j])
            i++,j++;
        else
            j=next1[j];
        if(j==len2){
            printf("%d\n",i-len2+1);
            j=next1[j];
        }
    }
    for(int i=1;i<=len2;i++){
        printf("%d ",next1[i]);
    }
} 

 

标签:typedef,P3375,洛谷,int,long,MAXN,KMP,include,模板
来源: https://www.cnblogs.com/mikku39/p/14512521.html