KMP与扩展KMP

原创 2015年07月09日 23:10:08

KMP

next数组 表示:
next[i] -> T[1…i-1] 前缀 与 T[1…i-1] 后缀相同的最大长度
next[next[i]] 次大长度

扩展KMP

next数组 表示:
next[i]-> T[i….m] 与 T的最大公共前缀长度
extend[i] -> S[i….m] 与 T的最大公共前缀长度

next是T与T自身得到的特殊的extend

模板:

int next[MAXN];
int extend[MAXN];
void EKMP(char s[],char t[])//s[]为主串,t[]为模式串
{
    int i,j,p,l;
    int len=strlen(t);
    int len1=strlen(s);
    memset(next,0,sizeof(next));
    memset(extend,0,sizeof(extend));

    next[0]=len;
    j=0;
    while(j+1<len&&t[j]==t[1+j])j++;
    next[1]=j;

    int a=1;
    for(int i=2;i<len;i++)
    {
        p=next[a]+a-1;
        l=next[i-a];
        if(i+l<p+1)next[i]=l;
        else
        {
            j=max(0,p-i+1);
            while(i+j<len&&t[i+j]==t[0+j])j++;
            next[i]=j;
            a=i;
        }
    }


    j=0;
    while(j<len1&&j<len&&s[j]==t[j])j++;

    extend[0]=j;
    a=0;
    for(i=1;i<len1;i++)
    {
        p=extend[a]+a-1;
        l=next[i-a];
        if(l+i<p+1)next[i]=l;
        else
        {
            j=max(0,p-i+1);
            while(i+j<len1&&j<len&&s[i+j]==t[j])j++;
            extend[i]=j;
            a=i;
        }
    }
}

参考:ppt

拓展kmp算法总结

算法总结第二弹,上次总结了下kmp,这次就来拓展kmp吧。 拓展kmp算法是对KMP算法的扩展,它解决如下问题: 定义母串S,和字串T,设S的长度为n,T的长度为m,求T与S的每一个后缀的最长公共前...
  • dyx404514
  • dyx404514
  • 2014年12月09日 22:02
  • 8515

一些扩展kmp的总结

花了一天多时间学了下ex_kmp。。。。 可以看刘雅琼的ppt,讲的非常清楚: 下载地址:http://url.cn/Rvjxa9 ex_kmp可以在线性时间内求文本串的每个位置与模板串的最大公...
  • u012797220
  • u012797220
  • 2014年04月01日 17:43
  • 1516

hdu 2594 扩展KMP模板题

//M hdu2594 扩展KMP 模板题 //题意:给定两个字符串,在第一个字符串中找到一个最大前缀作为第二个字符串的后缀 //思路:将S1作为模式串 然后在s2中寻找,S2作为目标串,用KMP就...
  • yellowjianokok
  • yellowjianokok
  • 2015年09月14日 20:28
  • 345

hdu 3613 扩展kmp求回文串

新建一个串为给定串的反转, 原串跟新串匹配求得是前缀回文, 新串跟原串匹配求得是后缀回文。#include #include #include #include #include #include...
  • acblacktea
  • acblacktea
  • 2016年07月10日 19:24
  • 330

字符串匹配-扩展KMP(Extend-KMP)

首先还是来看看问题: 给出一个长为N的字符串S,再给出一个长为M的字符串T 求S的所有后缀中和T的最长公共前缀 显然可以想到暴力的做法,枚举S所有的后缀,然后和T做匹配,时间复杂度为O(NM)O...
  • baidu_35009437
  • baidu_35009437
  • 2016年08月08日 11:13
  • 1545

2016-8-6夏令营总结(kmp,回文串,扩展kmp)

今天我们用了一个上午学习了字符串中的kmp,最长回文子串和扩展kmp算法,下午在编相应的裸题。KMP算法我们有一个长度为n的字符串S,长度为m的字符串T,问T在S里出现了几次? 这题是我们平时最经常...
  • zhouzhenghuac
  • zhouzhenghuac
  • 2016年08月06日 22:02
  • 336

【九度0J】 题目1535:重叠的最长子串 (扩展KMP算法)(滚动哈希算法--Rabin-Karp算法)

题目描述: 给定两个字符串,求它们前后重叠的最长子串的长度,比如"abcde"和“cdefg”是"cde",长度为3。 输入: 输入可能包含多个测试案例。 对于每个测试案例只有一行, 包含...
  • xiaozhuaixifu
  • xiaozhuaixifu
  • 2013年10月06日 15:52
  • 2194

重叠的最长子串 (扩展KMP算法)(滚动哈希算法--Rabin-Karp算法)

【九度0J】 题目1535:重叠的最长子串 (扩展KMP算法)(滚动哈希算法--Rabin-Karp算法) 分类: 挑战程序设计竞赛---读书笔记 Algorithm-字符串 枚举201...
  • pi9nc
  • pi9nc
  • 2013年10月07日 10:55
  • 2552

Trie、KMP、AC自动机小结

最近做了不字符串的题,做下小结吧~          首先是Trie(也叫前缀树),Trie的结构并不难理解,Trie是个树形结构,它的每条边对应一个字符,每个节点对应一个字符串的前缀(根节点对应空串...
  • qian99
  • qian99
  • 2014年02月05日 21:58
  • 1418

hdu__KMP算法模板题【持续更新中】

剪花布条                                                                           Time Limit: 1000/1000...
  • ACMore_Xiong
  • ACMore_Xiong
  • 2015年08月22日 12:08
  • 2979
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:KMP与扩展KMP
举报原因:
原因补充:

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