字符串匹配—KMP 扩展KMP Manacher
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的更多相关文章
- 神奇的字符串匹配:扩展KMP算法
引言 一个算是冷门的算法(在竞赛上),不过其算法思想值得深究. 前置知识 kmp的算法思想,具体可以参考 → Click here trie树(字典树). 正文 问题定义:给定两个字符串 S 和 T( ...
- Kuangbin 带你飞 KMP扩展KMP Manacher
首先是几份模版 KMP void kmp_pre(char x[],int m,int fail[]) { int i,j; j = fail[] = -; i = ; while (i < m ...
- ACM之路(12)—— KMP & 扩展KMP & Manacher
最近做完了kuangbin的一套关于kmp的题目(除了一道字典树的不会,因为还没学字典树所以先放放),做个总结.(kuangbin题目的链接:http://acm.hust.edu.cn/vjudge ...
- 模式字符串匹配问题(KMP算法)
这两天又看了一遍<算法导论>上面的字符串匹配那一节,下面是实现的几个程序,可能有错误,仅供参考和交流. 关于详细的讲解,网上有很多,大多数算法及数据结构书中都应该有涉及,由于时间限制,在这 ...
- kuangbin专题十六 KMP&&扩展KMP HDU2328 Corporate Identity
Beside other services, ACM helps companies to clearly state their “corporate identity”, which includ ...
- kuangbin专题十六 KMP&&扩展KMP HDU1238 Substrings
You are given a number of case-sensitive strings of alphabetic characters, find the largest string X ...
- kuangbin专题十六 KMP&&扩展KMP POJ3080 Blue Jeans
The Genographic Project is a research partnership between IBM and The National Geographic Society th ...
- 【string】KMP, 扩展KMP,trie,SA,ACAM,SAM,最小表示法
[KMP] 学习KMP,我们先要知道KMP是干什么的. KMP?KMPLAYER?看**? 正如AC自动机,KMP为什么要叫KMP是因为它是由三个人共同研究得到的- .- 啊跑题了. KMP就是给出一 ...
- kmp&扩展kmp
kmp: KMP的主要目的是求B是不是A的子串,以及若是,B在A中所有出现的位置 写的很详细的大佬的博客:http://www.matrix67.com/blog/archives/115 模板: / ...
随机推荐
- C#动态创建两个按钮,btn2复制btn1的Click事件,匿名委托
现在有一个按钮btn1,要动态创建出一个btn2,需要btn2点击时调用btn1的点击. 在delphi中这种操作很简单:btn2.onClick:=btn1.onClick,因为onClick就是个 ...
- Haskell Seq函数和严格计算
参考链接http://stackoverflow.com/questions/11046590/the-seq-function-and-strictness https://wiki.haskell ...
- 深入理解Hadoop集群和网络
导读:云计算和Hadoop中网络是讨论得相对比较少的领域.本文原文由Dell企业技术专家Brad Hedlund撰写,他曾在思科工作多年,专长是数据中心.云网络等.文章素材基于作者自己的研究.实验和C ...
- Android版本和API Level的对应关系
Platform Version API Level VERSION_CODE Notes Android 4.4 KITKAT Platform Highlights Android 4.3 JEL ...
- centos7下引导win7
1.使用root身份(必须)打开 /boot/grub2/grub.cfg 2.找到 ### BEGIN /etc/grub.d/30_os-prober ### 在后面添加 menuentry &q ...
- gimagex 2.0.17 汉化版
软件名称: gimagex 2.0.17 汉化版 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 1.31MB 图片预览: 软件简介: gimagex 2. ...
- 浅谈javascript中stopImmediatePropagation函数和stopPropagation函数的区别
在事件处理程序中,每个事件处理程序中间都会有一个event对象,而这个event对象有两个方法,一个是stopPropagation方法,一个是stopImmediatePropagation方法,两 ...
- Thymeleaf 3与Spring MVC 4 整合配置
Thymeleaf 3与Spring MVC 4 整合配置 Maven 依赖配置 Spring 相关依赖就不说了 <dependency> <groupId>org.thyme ...
- CodeForces 706C Hard problem
简单$dp$. $dp[i][0]$:第$i$个串放置完毕,并且第$i$个串不反转,前$i$个串字典序呈非递减的状态下的最小费用. $dp[i][1]$:第$i$个串放置完毕,并且第$i$个串反转,前 ...
- VS2010下编译sqlite3
首先下载源码,http://www.sqlite.org/download.html中第一个下载文件就是,下载sqlite-amalgamation-3071000.zip,当前版本是3.7.10,里 ...