kmp模板

作者: MMatx | 来源:发表于2019-03-23 20:59 被阅读0次

KMP模板

const int maxn=2000000+50;
int nextt[maxn];
int a[maxn],b[maxn];
int n,m;
int kmnext[maxn];
void  Find()
{
    memset(nextt,0,sizeof(nextt));
    int i=0;
    int j=-1;
    nextt[0]=-1;
    while(i<m)
    {
        while(j!=-1&&b[i]!=b[j])
        {
            j=nextt[j];
        }
        nextt[++i]=++j;
    }
}
void EXKMP()
{
    int i=0;
    int j=-1;
    nextt[0]=-1;
    while(i<m)
    {
        if(j!=-1&&b[i]!=b[j])
            j=kmnext[j];
        if(b[++i]==b[++j])
            kmnext[i]=kmnext[j];
        else
            kmnext[i]=j;
    }
}
int  KMP()
{
    int ans=-1;
    int  j=-1;
    for(int i=0; i<n; i++)
    {
        while(j!=-1&&a[i]!=b[j])
            j=nextt[j];
        j++;
        if(j==m)
        {
            ans=i-m+2;
            break;
        }
        if(a[i]==b[j])
        {
            if(j+1==m)
            {
                ans=i-m+2;
                break;
            }
        }
    }
    return ans;
}

相关文章

网友评论

      本文标题:kmp模板

      本文链接:https://www.haomeiwen.com/subject/cpdevqtx.html