KMP(整数匹配)

原创 2012年03月28日 10:56:38

http://acm.hdu.edu.cn/showproblem.php?pid=1711

看了 严蔚敏老师讲解的KMP算法后,想找个题做一下,听的时候,感觉还行,可是做起题来还是有点问题,特别是next数组的取值,自己参考着写一直没有过,

后来看了下别人的资料,next[0]从-1开始取值就AC了,看来next函数的取值还是比较重要,理解还是不够。。。。

#include<iostream>
#define M 10005
#define N 1000005
using namespace std;
int s[N],t[M],next[M];
int n,m;

void getNext()
 {
    int i=0;
    int j=-1;
    next[0]=-1;
    while(i<m)
    {
        if(t[i]==t[j]||j==-1)
        {
            i++;
            j++;
            if(t[i]!=t[j])
                next[i]=j;
            else
                next[i]=next[j];
        }
        else
            j=next[j];
    }
}

int KMP(int pos)
{
    int i=pos;
    int j=0;
    while(i<n&&j<m)
    {
        if(s[i]==t[j]||j==-1)
        {
            i++;
            j++;
        }
        else
            j=next[j];
    }
    if(j==m)
        return i-j+1;
    else
        return -1;
}
 
int main()
{
    int i,T;
    cin>>T;
    while(T--)
    {
        memset(s,0,sizeof(s));
        memset(t,0,sizeof(t));
        memset(next,0,sizeof(next));
        scanf("%d%d",&n,&m);
        for(i=0;i<n;i++)
            scanf("%d",&s[i]);
        for(i=0;i<m;i++)
            scanf("%d",&t[i]);
        getNext();
        printf("%d\n",KMP(0));
    }
        return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

字符串匹配KMP算法讲解

  • 2011-06-04 09:15
  • 42KB
  • 下载

UVALive 3490 (LA 3940) || ZOJ 2619 Generator AC自动机(或KMP) + 整数高斯消元 + 数学期望

题目大意: 就是现在一个字符串生成器每次随机扔出前n(n 将产生的字符连接起来成为其生成的字符串,如果它产生的字符串中有连续的一段出现了给定的禁止串,则生成停止 求停止时已经生成的字符串长度的期望 ...

KMP字符串匹配算法

KMP算法分两步: 1、求解模式串的next数组 2、当模式串中的字符和目标串中的字符失配时,利用模式串的next数组对模式串进行右移 因此要实现KMP算法,首先要求解next数组:     ...

kmp 匹配算法

  • 2008-06-26 00:27
  • 705B
  • 下载

KMP字符串匹配算法

KMP字符串匹配算法
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)