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. 基于python第三方requests 模块的HTTP请求类

    使用requests模块构造的下载器,首先安装第三方库requests pip install requests 1 class StrongDownload(object): def __init_ ...

  2. 【完全背包】HDU 4508 湫湫系列故事——减肥记I

    Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) ...

  3. MFC中CListCtrl说明

    转载:http://blog.csdn.NET/lhy2199/article/details/5177032 listctrl默认view 风格为report CListCtrl类封装"列 ...

  4. wife信号如何传播

    方法一:像哈利波特一样穿墙而出 无论是wife信号还是广播信号本质上都属于电磁波.x光穿透力强所以可以穿透人体给体内照相,但是wife信号作为电磁波虽然也可以穿透墙而过,但是他的穿透能力实在是太弱了. ...

  5. LeetCode 392. Is Subsequence

    Given a string s and a string t, check if s is subsequence of t. You may assume that there is only l ...

  6. CoreJavaE10V1P3.7 第3章 Java的基本编程结构-3.7 输入输出(Input ,Output)

    3.7.1 读取输入 Scanner in = new Scanner(System.in); System.out.print("What is your name? "); S ...

  7. C#中(int)a和Convert.ToInt32(a)的区别

    首先,在 C# 中,int 其实就是 System.Int32,即都是32位的. 其次,(int) 和 Convert.ToInt32 是两个不同的概念,前者是类型转换,而后者则是内容转换,它们并不总 ...

  8. 关于float和position

      在div 块级元素中,一般我们的div块都是流式的,如果你设定一个div,接下来的div就会另起行,也就是块级元素的定义 但是一般排版不是这样的,最典型的应该就是这种布局了,那么中间的那三个div ...

  9. zabbix 布署实践【5 使用邮箱SMTP SSL推送告警邮件】

    由于传统的邮件推送脚本使用smtp 25端口,在各大邮箱提供商已不适用,已经向SSL过渡,这里以QQ邮箱为例,使用SSL 465端口 登录zabbix-server 进入 cd /usr/lib/za ...

  10. 转:iOS程序main函数之前发生了什么

    原文地址:http://blog.sunnyxx.com/2014/08/30/objc-pre-main/ 我是前言 一个iOS app的main()函数位于main.m中,这是我们熟知的程序入口. ...