KMP模式匹配

int nxt[maxn];//c++11中next用作数组名会CE 
nxt[1]=0;
for(int i=2,j=0;i<=m;i++){
    while(j&&b[i]!=b[j+1]) j=nxt[j];
    if(b[i]==b[j+1]) nxt[i]=j+1;
}

for(int i=1,j=0;i<=n;i++){//A->i B->j
    while((j==m)||(j&&s[i]!=s[j+1])) j=nxt[j];
    if(s[i]==s[j+1]) j++;
    if(j==m) cout<<i<<endl;
}

 

posted @ 2021-02-10 22:59  DReamLion  阅读(34)  评论(0编辑  收藏  举报