阅读背景:

kmp入门 洛谷模板题_我是蒋卫升呀~_kmp洛谷

来源:互联网 
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+100;
char a[maxn],b[maxn];
int nexts[maxn];
int main()
{
    scanf("%s%s",b,a);
    int len1=strlen(a);
    nexts[0]=-1;
    for(int i=0,j=-1;i<=len1;)
    {
        if(j==-1||a[i]==a[j])nexts[++i]=++j;
        else j=nexts[j];
    }

    int len=strlen(b);
    int k=0;
    for(int i=0;i<len;i++)
    {
        while(k&&b[i]!=a[k])k=nexts[k];
        k+=a[k]==b[i]?1:0;
        if(k==len1)printf("%d\n",i-len1+2);
    }
    for(int i=1;i<=len1;i++)cout<<nexts[i]<<' ';
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
co



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: