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算法

在软考的复习中,看到过几次 字符串的模式匹配算法。看起来挺难的。所以花了点时间查了查关于字符串匹配的算法。下面详细介绍一下KMP模式匹配算法 以及next[j]函数如何计算。...
  • zc474235918
  • zc474235918
  • 2014年10月26日 10:14
  • 3028

KMP算法之部分匹配值计算

KMP算法我在网上搜了很多说明,但论简洁易懂还属阮一峰的那篇文章,强烈推荐大家看看 个人觉得唯一不足之处在于《部分匹配值》的计算方法描述有些不清楚,在此按自己的理解更详细的详解一下 ...
  • ITsenlin
  • ITsenlin
  • 2014年03月19日 00:54
  • 4371

字符串匹配算法KMP详细解释——深入理解

1. 前言  字符串匹配是一个经典算法问题,展开来讲各类问题多达几十种,有名称的算法也不下三十种,所以需要深入学习的东西有很多。这次我们来探讨一个最简单的问题,假设现在随机输入一个长度为m的主串T,另...
  • FX677588
  • FX677588
  • 2016年12月04日 16:09
  • 3327

KMP算法模式匹配

在一个长串中查找一个子串是较常用的操作。各种信息检索系统,文字处理系统都少不了。本文介绍一个非常著名的KMP模式匹配算法用于子串查找...
  • pony_maggie
  • pony_maggie
  • 2014年07月15日 21:49
  • 7971

详细解读KMP模式匹配算法

首先我们需要了解什么是模式匹配? 子串定位运算又称为模式匹配(Pattern Matching)或串匹配(String Matching)。在串匹配中,一般将主串称为目标串,将子串称为模式串。本篇博客...
  • FightLei
  • FightLei
  • 2016年09月30日 16:54
  • 12288

<C/C++算法>字符串匹配---KMP算法

KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配...
  • EbowTang
  • EbowTang
  • 2015年10月14日 19:14
  • 5654

KMP字符串匹配(初学者必看,讲的很清晰)

从头到尾彻底理解KMP 首先声明一下,本博文转自July的博客,之前看了很多关于KMP算法的博客,发现都没讲清楚,但看了July的博客后,我就对KMP算法有了一个很清楚的...
  • luoshengkim
  • luoshengkim
  • 2015年03月29日 10:34
  • 2796

字符串匹配算法KMP Java实现

kmp算法的核心思想:先对搜索字串生成偏移对照表,匹配时从左向右依次比较(bm从右向左,号称比kmp更快),相等则文档和搜索字串的下标+1迭代,否则查表,定位最优的偏移位置(文档下标不变,搜索字串下标...
  • a386347993
  • a386347993
  • 2015年01月09日 10:49
  • 1034

ACM-字符串-模式串匹配-KMP算法

KMP
  • u011787119
  • u011787119
  • 2016年01月17日 22:23
  • 1545

KMP算法 串的模式匹配算法优秀总结

转载大神的博客受益匪浅 这几天学习kmp算法,解决字符串的匹配问题,开始的时候都是用到BF算法,(BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符...
  • ltyqljhwcm
  • ltyqljhwcm
  • 2016年05月20日 12:21
  • 1280
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:KMP(整数匹配)
举报原因:
原因补充:

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