51nod1089---最长回文子串 V2(51nod基础:Manacher算法)
来源:互联网 发布:微商做图软件有哪些 编辑:程序博客网 时间:2024/09/21 06:18
【题目来源】:https://www.51nod.com
【题意&&思路】
刚才为了做这个题,就去学了下Manacher算法,这种算法是以线性的时间复杂度,前后只需要匹配没有匹配过的,这里放下一篇比较易懂的博客,Manacher算法详解,。
【代码】
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int maxn=1000010;char str[maxn];//原字符串char tmp[maxn<<1];//转换后的字符串int Len[maxn<<1];//转换原始串int INIT(char *st){ int i,len=strlen(st); tmp[0]='@';//字符串开头增加一个特殊字符,防止越界 for(i=1;i<=2*len;i+=2) { tmp[i]='#'; tmp[i+1]=st[i/2]; } tmp[2*len+1]='#'; tmp[2*len+2]='$';//字符串结尾加一个字符,防止越界 tmp[2*len+3]=0; return 2*len+1;//返回转换字符串的长度}//Manacher算法计算过程int MANACHER(char *st,int len){ int mx=0,ans=0,po=0;//mx即为当前计算回文串最右边字符的最大值 for(int i=1;i<=len;i++) { if(mx>i) Len[i]=min(mx-i,Len[2*po-i]);//在Len[j]和mx-i中取个小 else Len[i]=1;//如果i>=mx,要从头开始匹配 while(st[i-Len[i]]==st[i+Len[i]]) Len[i]++; if(Len[i]+i>mx)//若新计算的回文串右端点位置大于mx,要更新po和mx的值 { mx=Len[i]+i; po=i; } ans=max(ans,Len[i]); } return ans-1;//返回Len[i]中的最大值-1即为原串的最长回文子串额长度}int main(){ scanf("%s",str); int len=INIT(str); int ans=MANACHER(tmp,len); printf("%d\n",ans);}
阅读全文
0 0
- 51nod1089---最长回文子串 V2(51nod基础:Manacher算法)
- 51nod1089 最长回文子串 V2(Manacher算法)
- 51nod 最长回文子串 V2(Manacher算法)
- 51nod1089最长回文子串--Manacher算法(Java语言)
- 51nod 1089 最长回文子串 V2 (Manacher算法)
- 51nod-【1089 最长回文子串 V2(Manacher算法)】
- 51nod 1089 最长回文子串 V2(Manacher算法)
- 【51nod】1089 最长回文子串 V2(Manacher算法)
- 51nod 1089 最长回文子串 V2(Manacher算法)
- 51Nod 1089 最长回文子串 V2(Manacher算法)
- 51nod--1089 最长回文子串V2(Manacher 算法)
- 51Nod 1089 最长回文子串 V2(Manacher算法)
- 51nod 1089 最长回文子串 V2(Manacher算法)
- 51Nod-1089 最长回文子串 V2(Manacher算法)
- 51nod 1089 最长回文子串 V2(Manacher算法)
- 51Nod 1089 最长回文子串 V2(Manacher算法)
- 51nod_1089 最长回文子串 V2(Manacher算法)
- 51Nod 1089 最长回文子串 V2 —— Manacher算法
- 综合除法和余数定理
- android studio gradle 命令行
- SpringBoot开发详解(十二) -- SpringBoot中执行定时任务
- 杭电oj1049 根据规律 写几个就推出来了
- 杭电oj1040 简单的排序
- 51nod1089---最长回文子串 V2(51nod基础:Manacher算法)
- Linux---lnmp之mysql
- 【shell】head/tail及常见用法
- 《零基础入门学习Python》学习过程笔记【017函数】
- 利用Angular2的Observables实现交互控制
- 移动端一像素边框
- Angular4示例--数据显示
- openCV学习笔记(一)------进度条视频播放控制
- bzoj P4034 [HAOI2015]树上操作