KMP

a是主串,b是要找的串

const int N=1e5+10;
char a[N];
char b[N];
int Next[N];
void find_Next()
{
    Next[0]=0;
    int len=strlen(b),k=0;
    rep(i,1,len)
    {
        while(k&&b[k]!=b[i])
        k=Next[k-1];
        if(b[k]==b[i]) k++;
        Next[i]=k;
    }
}
int KMP()
{
    find_Next();
    int ans=0,lena=strlen(a),lenb=strlen(b);
    for(int i=0,j=0;i<lena;i++)
    {
        while(a[i]!=b[j]&&j)
        j=Next[j-1];
        if(a[i]==b[j])    j++;
        if(j==lenb)
        {
                return i-j+1;
        }
    }
    return -1;
}
posted @ 2019-04-24 17:54  一无所知小白龙  阅读(76)  评论(0编辑  收藏  举报