hdu1711

链接: 点击打开链接
题意:问第二个串从第一个串的第几位开始匹配
代码:
#include <stdio.h>
#include <string.h>
void get_next(int p[],int next[],int pl)
{
    int j,k;
    k=-1;j=0;
    next[0]=-1;
    while(j<pl)
    {
        if(p[j]==p[k]||k==-1)
        {
            j++;k++;
            next[j]=k;
        }
        else
        k=next[k];
    }
}
int KMP(int s[],int p[],int sl,int pl)
{
    int next[10005];
    int i,j;
    i=j=0;
    get_next(p,next,pl);
    while(i<sl&&j<pl)
    {
        if(j==-1||s[i]==p[j])
        {
            i++;j++;
        }
        else
        j=next[j];
        if(j==pl)
        return i-j+1;                                     //就是改这里
    }
    return -1;
}
int s[1000005],p[10005];
int main()
{
    int i,t,n,m;
    while(scanf("%d",&t)!=EOF)
    {
        while(t--)
        {
            scanf("%d%d",&n,&m);
            for(i=0;i<n;i++)
            scanf("%d",&s[i]);
            for(i=0;i<m;i++)
            scanf("%d",&p[i]);
            printf("%d\n",KMP(s,p,n,m));
        }
    }
    return 0;
}


你可能感兴趣的:(hdu1711)