kuangbin字符串专题传送门--http://acm.hust.edu.cn/vjudge/contest/view.action?cid=70325#overview

算法模板:

KMP:

const int MAXM=10010;
const int MAXN=1000010;
int a[MAXN],b[MAXM],Next[MAXM];
int n,m; void getNext(int b[],int Next[])
{
int j=0,k=-1;
Next[0]=-1;
while(j<m-1)
{
if(k==-1||b[j]==b[k]) //匹配
{
j++,k++;
Next[j]=k;
}
else
k=Next[k]; //不匹配
}
} int KMP(int a[],int b[])
{
int i=0,j=0;
getNext(b,Next);
while(i<n)
{
if(j==-1||a[i]==b[j])
i++,j++;
else
j=Next[j];
if(j==m)
return i-m+1;
}
return -1;
}

扩展KMP:

const int MAXN;
int Next[MAXN],extend[MAXN];
char a[MAXN],b[MAXN]; void getNext(char b[])
{
int i,len=strlen(b);
Next[0]=len;
for(i=0;i<len-1&&b[i]==b[i+1];i++)
{
Next[1]=i;
int tmp=1;
for(int k=2;k<len;k++)
{
int p=tmp+Next[tmp]-1,L=Next[k-tmp];
if((k-1)+L>=p)
{
int j=(p-k+1)>0?(p-k+1):0;
while(k+j<len&&b[k+j]==b[j])
j++;
Next[k]=j,tmp=k;
}
else Next[k]=L;
}
}
} void getExtend(char a[],char b[])
{
memset(Next,0,sizeof(Next));
getNext(b);
int lena=strlen(a),lenb=strlen(b),tmp=0;
int minlen=lena<lenb?lena:lenb;
while(tmp<minlen&&a[tmp]==b[tmp])
tmp++;
extend[0]=tmp,tmp=0;
for(int k=1;k<lena;k++)
{
int p=tmp+extend[tmp]-1,L=Next[k-tmp];
if((k-1)+L>=p)
{
int j=(p-k+1)>0?(p-k+1):0;
while(k+j<lena&&j<lenb&&a[k+j]==b[j])
j++;
extend[k]=j,tmp=k;
}
else extend[k]=L;
}
}

Manacher:

const int MAXN=110010;
char s1[MAXN],Mt[MAXN*2];
int Mp[MAXN*2]; int Manacher(int len,char s[])
{
int Mx=0,id=0,L=0;
int ret=0;
Mt[L++]='$';Mt[L++]='#';
for(int i=0;i<len;i++)
{
Mt[L++]=s[i];
Mt[L++]='#';
}
Mt[L]=0;
for(int i=1;i<L;i++)
{
if(Mx>i)
Mp[i]=min(Mp[id*2-i],Mx-i);
else
Mp[i]=1;
while(Mt[i+Mp[i]]==Mt[i-Mp[i]])
Mp[i]++;
if(Mp[i]+i>Mx)
{
Mx=Mp[i]+i;
id=i;
}
if(Mp[i]-1>ret)
ret=Mp[i]-1;
}
return ret;
}

字符串匹配—KMP 扩展KMP Manacher的更多相关文章

  1. 神奇的字符串匹配:扩展KMP算法

    引言 一个算是冷门的算法(在竞赛上),不过其算法思想值得深究. 前置知识 kmp的算法思想,具体可以参考 → Click here trie树(字典树). 正文 问题定义:给定两个字符串 S 和 T( ...

  2. Kuangbin 带你飞 KMP扩展KMP Manacher

    首先是几份模版 KMP void kmp_pre(char x[],int m,int fail[]) { int i,j; j = fail[] = -; i = ; while (i < m ...

  3. ACM之路(12)—— KMP & 扩展KMP & Manacher

    最近做完了kuangbin的一套关于kmp的题目(除了一道字典树的不会,因为还没学字典树所以先放放),做个总结.(kuangbin题目的链接:http://acm.hust.edu.cn/vjudge ...

  4. 模式字符串匹配问题(KMP算法)

    这两天又看了一遍<算法导论>上面的字符串匹配那一节,下面是实现的几个程序,可能有错误,仅供参考和交流. 关于详细的讲解,网上有很多,大多数算法及数据结构书中都应该有涉及,由于时间限制,在这 ...

  5. kuangbin专题十六 KMP&&扩展KMP HDU2328 Corporate Identity

    Beside other services, ACM helps companies to clearly state their “corporate identity”, which includ ...

  6. kuangbin专题十六 KMP&&扩展KMP HDU1238 Substrings

    You are given a number of case-sensitive strings of alphabetic characters, find the largest string X ...

  7. kuangbin专题十六 KMP&&扩展KMP POJ3080 Blue Jeans

    The Genographic Project is a research partnership between IBM and The National Geographic Society th ...

  8. 【string】KMP, 扩展KMP,trie,SA,ACAM,SAM,最小表示法

    [KMP] 学习KMP,我们先要知道KMP是干什么的. KMP?KMPLAYER?看**? 正如AC自动机,KMP为什么要叫KMP是因为它是由三个人共同研究得到的- .- 啊跑题了. KMP就是给出一 ...

  9. kmp&扩展kmp

    kmp: KMP的主要目的是求B是不是A的子串,以及若是,B在A中所有出现的位置 写的很详细的大佬的博客:http://www.matrix67.com/blog/archives/115 模板: / ...

随机推荐

  1. JavaEE XML XSL转换(XSLT)

    XSL转换(XSLT) @author ixenos 定义: XSL转换机制可以指定将XML文档转换为其他格式的规则,例如,txt纯文本.XHTML或其他任何XML格式. 用途: XSLT通常用来将某 ...

  2. bootstrap 混合标签

    <html lang="zh_cn"> <head> <meta charset="utf-8"> <meta htt ...

  3. C# 中 重载,重写,隐藏的区别

    重载: 就是写多个同名方法,参数个数不同或类型不同或返回值不同 重写:子类中实现的方法必须加override关键词   普通非抽象父类需要virtual 抽象类里面抽象方法abstract 接口的实现 ...

  4. NullSafe 的原理

    摘要 NullSafe is a simple category on NSNull that returns nil for unrecognised messages instead of thr ...

  5. DUIlib使用Fastreport--自定义的数据

    报表根据数据源的可以分为拉模式和推模式,拉模式就是在报表中添加数据源组件从数据库中拉取数据,我们上篇报表的简单使用就是拉模式.而推模式就是在程序中构造数据托给报表显示.这篇我们这要说的是推模式. 在程 ...

  6. POI插件使用读取office文件

    html文件代码如下: <!doctype html> <html> <head> <meta charset="utf-8"> & ...

  7. C语言 · FJ的字符串

    问题描述 FJ在沙盘上写了这样一些字符串: A1 = "A" A2 = "ABA" A3 = "ABACABA" A4 = "AB ...

  8. NYOJ 299

    (前言:这是一道关于矩阵快速幂的问题,介绍矩阵快速幂之前,首先看"快速幂"问题. 在前面的博客里有记录到快速幂取模算法,不过总体的思想总是和取模运算混淆在一起,而忽略了" ...

  9. maven中在本地maven仓库添加jar包

    Maven 手动添加 JAR 包到本地仓库 Maven 确确实实是个好东西,用来管理项目显得很方便,但是如果是通过 Maven 来远程下载 JAR 包的话,我宿舍的带宽是4兆的,4个人共用,有时候用  ...

  10. Python学习笔记——基础篇【第六周】——json & pickle & shelve & xml处理模块

    json & pickle 模块(序列化) json和pickle都是序列化内存数据到文件 json和pickle的区别是: json是所有语言通用的,但是只能序列化最基本的数据类型(字符串. ...