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

来源:互联网 发布:数控车床编程自学视频 编辑:程序博客网 时间:2024/06/05 16:31

KMP

题目传送门

因为某些原因,只好先搞KMP喽!

代码:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char s1[1000005],s2[1005];int nxt[1005];int main(){    scanf("%s%s",s1,s2);    int n=strlen(s1),m=strlen(s2);    int node=0;     for (int i=1;i<m;i++){        while (node&&s2[node]!=s2[i]) node=nxt[node-1];        if (s2[node]==s2[i]) node++;         nxt[i]=node;    }    node=0;    for (int i=0;i<n;i++){        while (node&&s2[node]!=s1[i])             node=nxt[node-1];        if (s2[node]==s1[i]) node++;        if (node==m){            node=nxt[node-1];            printf("%d\n",i-m+2);        }    }    for (int i=0;i<m;i++)        printf("%d ",nxt[i]);    return 0;}
原创粉丝点击