hdu 3068 最长回文【manacher】(模板题)
<题目链接>
最长回文
回文就是正反读都是一样的字符串,如aba, abba等
两组case之间由空行隔开(该空行不用处理)
字符串长度len <= 110000
#include <bits/stdc++.h> using namespace std;const int N = 2e5+5; int len[N]; char str[N],s[N];void init(){ //得到处理后的新字符串str[0]='@';int i;for(i=0;s[i]!=0;i++){str[2*i+1]='#';str[2*i+2]=s[i];}str[2*i+1]='#';str[2*i+2]=0; } int manacher(){int id=0,mx=0; //id为能当前能够到达字符串最右端的回文串的中心位置for(int i=1;str[i];i++){len[i]=mx>i?min(len[2*id-i],mx-i):1; // 2*id-i,指的是i关于id 对称得到的坐标,因为前面已经算过了mx前的每个点的回文串,所以,如果这个i点在mx范围内,就将len[i]初始化为前面算过的数值while(str[i+len[i]]==str[i-len[i]])len[i]++;if(i+len[i]>mx) //mx为前i个回文子串的右端点所能到达的最大距离,即前面已经算过的最大回文区域mx=i+len[i],id=i;}int ans=0;for(int i=1;str[i];i++)ans=max(ans,len[i]);return ans-1; //回文串长度为len[i]-1,这个可以自己画图理解,因为s[]数组是在原串的基础上插入了 '#' } int main(){while(~scanf("%s",s)){init();printf("%d\n",manacher());} }
转载于:https://www.cnblogs.com/00isok/p/9419714.html
hdu 3068 最长回文【manacher】(模板题)相关推荐
- HDU 3068 最长回文 manacher算法
Manacher算法的裸题 下面简单说一下复杂度为O(n)的马拉车算法 首先过程中涉及到的变量有: p[i]表示以t[i]字符为中心的回文子串的半径 id为最大回文子串中心的位置 mx是回文串 ...
- HDU - 3068 最长回文(manacher)
HDU - 3068 最长回文 Time Limit: 2000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Subm ...
- HDU 3068 最长回文
最长回文串模板题 Manacher 算法 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> ...
- hdu 3068 最长回文 (Manacher算法求最长回文串)
参考博客:Manacher算法--O(n)回文子串算法 - xuanflyer - 博客频道 - CSDN.NET 从队友那里听来的一个算法,O(N)求得每个中心延伸的回文长度.这个算法好像比较偏门, ...
- hdu 3068 最长回文(manacher算法)
最长回文 Time Limit: 4000/2000 M ...
- hdu 3068 最长回文(manacheramp;最长回文子串)
最长回文 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 3068 最长回文
Manacher算法练笔,O(n)求最长回文子串. 参考资料:http://blog.csdn.net/ggggiqnypgjg/article/details/6645824 http://www. ...
- 最长回文(Manacher算法模板)
题目描述 给出一个只由小写英文字符a,b,c-y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input 输入有多组case,不超过120组,每 ...
- 杭电3068 最长回文 最长回文的manacher算法
最长回文 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
最新文章
- R语言plotly可视化:使用PCA算法进行数据降维、使用plotly可视化随着主成分的增加解释的方差的量(plotting explained variance)
- python中如何判断输入的是英文字母_python如何判断一个字符是否为汉字,英文字母,数字,空还是其他...
- The total number of locks exceeds the lock table s
- Nginx实用指南V1 (连载之四:流行CMS博客rewrite写法)
- linux下oracle数据库服务和监听的启动停止
- 【Vue】 Error with Vue lazy loading components: “Failed to resolve async component“
- 原生Java代码拷贝目录
- BugKuCTF 杂项 多种方法解决
- 06-CABasicAnimation基础核心动画
- 混合牛奶(洛谷-P1208)
- nodejs的mysql初始化
- Silverlight 2.5D RPG游戏技巧与特效处理:(十八)开场卷轴与动态窗口
- 趣学 C 语言(七)—— 文件读写操作
- C# TabControl增加关闭按钮
- Mac合并pdf文件最简单的方法——PDF Expert合并pdf文件教程
- 《流言终结者》,再见
- Java完全自学手册,从外包到大厂,再到年薪100万都靠它
- 爬虫访问中,如何解决网站限制IP的问题?
- regsvr32 命令小集注册OCX控件,注册控件
- 手机浏览器上网谁最快?手机浏览器速度测评