KMP——模板整理

来源:互联网 发布:dw for mac中文破解版 编辑:程序博客网 时间:2024/05/19 09:17

用于字符串匹配问题。
时间复杂度O(n+m)

#include<cstdio>#include<cstring>char a[100005],b[100005];int nxt[100005],len1,len2;void make_nxt(){    nxt[1]=0;    int j=0;    for(int i=2;i<=len2;i++){        while(j&&b[j+1]==b[i]) j=nxt[j];        if(b[j+1]==b[i]) j++;        nxt[i]=j;    }}void KMP(){    int j=0;    for(int i=1;i<=len1;i++){        while(j&&a[i]!=b[j+1]) j=nxt[j];        if(a[i]==b[j+1]) j++;        if(j==len2){            printf("a[%d~%d]==b\n",i-len2+1,i);            j=nxt[j];        }    }}int main(){    freopen("kmp.in","r",stdin);    freopen("kmp.out","w",stdout);    scanf("%s",a+1); len1=strlen(a+1);    scanf("%s",b+1); len2=strlen(b+1);    make_nxt();    KMP();    return 0;}
0 0