hdu 1711 朴素kmp

来源:互联网 发布:万圣节面具淘宝 编辑:程序博客网 时间:2024/05/22 02:23
//hdu 1711 朴素kmp 返回b串在a串中匹配后的位置
#include<stdio.h>
#include<string.h>
int n,m,a[1000010],b[1000010],next[1000010];
void getnext()
{
    inti=0,j=-1;
    next[0]=-1;
    while(i!=m)
    {
        if(j==-1||b[i]==b[j])
            next[++i]=++j;
        else
            j=next[j];
    }
}
int kmp()
{
    inti=0,j=0;
    while(i!=n)
    {
        if(j==-1||a[i]==b[j])
        {
            ++i;++j;
            if(j==m)return i-j+1;
        }
        else
            j=next[j];
    }
return-1;
}
int main()
{
    intT;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(next,0,sizeof(next));
        for(inti=0;i<n;i++)
            scanf("%d",&a[i]);
        for(inti=0;i<m;i++)
            scanf("%d",&b[i]);
        getnext();
        printf("%dn",kmp());
    }
    return0;
}
原创粉丝点击