P3805 【模版】manacher算法(manacher)
P3805 【模版】manacher算法
题目描述
给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.
字符串长度为n
输入输出格式
输入格式:
一行小写英文字符a,b,c...y,z组成的字符串S
输出格式:
一个整数表示答案
输入输出样例
aaa
3
说明
字符串长度len <= 11000000
分析
str数组是原来的数组,s是后来的数组。
那样例说,str:aaa,s:##a#a#a#,转变的过程中的左移等位运算模拟一下就会很清楚。
原先是一个一个赋值,s[k++] = '#', str[k++] = s[i];结果tle最后一个点,改成位运算好了。
manacher模板
code
1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define MAXN 31000000 5 using namespace std; 6 7 char s[MAXN],str[MAXN]; 8 int p[MAXN],len; 9 10 void init() 11 { 12 len = strlen(str); 13 s[0] = '#'; 14 for (int i=0; i<len; ++i) 15 { 16 s[i<<1|1] = '#'; 17 s[(i+1)<<1] = str[i]; 18 } 19 s[len<<1|1] = '#'; 20 len = (len<<1|1); 21 } 22 int manacher() 23 { 24 int mx = 0, id; 25 for (int i=1; i<=len; ++i) 26 { 27 if (mx>i) p[i] = min(p[id<<1-1],mx-i); 28 else p[i] = 1; 29 while (s[i+p[i]]==s[i-p[i]]) p[i]++; 30 if (p[i]+i>mx) 31 mx = p[i]+i, id = i; 32 } 33 int ans = 0; 34 for (int i=1; i<len; ++i) ans = max(ans,p[i]); 35 return ans-1; 36 } 37 int main() 38 { 39 scanf("%s",str); 40 init(); 41 printf("%d",manacher()); 42 return 0; 43 }
转载于:https://www.cnblogs.com/mjtcn/p/7159279.html
P3805 【模版】manacher算法(manacher)相关推荐
- 通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)
1. 回文串 作为程序员,回文串这个词已经见怪不怪了,就是一个字符串正着读和反着读是一样的,形式如abcdcba.bbaabb.这里涉及到奇回文和偶回文,奇回文指回文串的字符数是奇数,偶回文指回文串的 ...
- java 最长回文串_通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)...
1. 回文串 作为程序员,回文串这个词已经见怪不怪了,就是一个字符串正着读和反着读是一样的,形式如abcdcba.bbaabb.这里涉及到奇回文和偶回文,奇回文指回文串的字符数是奇数,偶回文指回文串的 ...
- Manacher算法 - 求最长回文串的利器
求最长回文串的利器 - Manacher算法 Manacher主要是用来求某个字符串的最长回文子串. 不要被manacher这个名字吓倒了,其实manacher算法很简单,也很容易理解,程序短,时间复 ...
- P3805 【模板】manacher算法
思路 manache的板子 manacher是一种能在O(n)的时间复杂度内求出最长回文子串的一种算法 首先要在每个串之间加上'#',使得奇数长度和回文串和偶数长度的回文串可以被统一考虑 之后要在首位 ...
- manacher算法学习(求最长回文子串长度)
Manacher总结 我的代码 学习:yyb luogu题目模板 xzy的模板 #include<iostream> #include<cstdlib> #include< ...
- 字符串-Manacher算法(你知道马拉车算法吗?)
文章目录 原理 奇偶问题 p[]数组 马拉车求p[] 模板 例题 P3805 [模板]manacher算法 P1659 拉拉队排练 原理 马拉车算法当然不是马拉着车的奇奇怪怪的东西,是Manacher ...
- Manacher算法
目录 Manacher算法 算法思想 求LLL数组 例题 Manacher算法 描述: Manacher 算法用于求解字符串中最长回文子串的问题. 在了解该算法之前需要明白一些基本概念: 回文串:对于 ...
- manacher算法----O(n)最长回文串
manacher算法----O(n)最长回文串 分类:字符串 (126) (0) 举报 收藏 manacher的时间复杂度为O(n),后缀数组好像可以处理O(nlogn),但是有些变态题目可能卡 ...
- 谈谈我对Manacher算法的理解
Manacher算法其实是求字符串里面最长的回文. ①在学习该算法前,我们应该知道回文的定义:顺序读取回文和逆序读取回文得到的结果是一样的,如:abba,aba. 那么我们不难想到,在判断一个字符串s ...
最新文章
- 上证所Level-2在信息内容和传送方式方面的比较优势[逐笔数据与分笔数据的根本区别]...
- mysql5.623 GTID主从复制+半同步复制安装与配置
- eclipse服务器添加项目工程,eclipse创建和发布web项目(示例代码)
- 第一天 echo test (()) [[]]
- OpenCV探索之路(六):图像变换——霍夫变换
- 【读书笔记】—— 《从 0 到 1》
- 全网首发:MAC上运行SHELL脚本,typeset -l报错
- 计算机硬盘扇区修复,w7硬盘坏道修复详细教程
- python过滤器_python中的Butterworth过滤器
- 解决win10桌面无法删除ie浏览器图标
- 2020年全球及中国干细胞医疗行业发展现状及竞争情况分析,美国领先于世界,北上广领先于中国「图」
- java xap_阻止xap文件在浏览器中缓存
- 奇安信天擎的退出以及卸载
- git中误提交了不想提交的文件,想要从版本库中删除的方法
- 默写人体的方法有哪些?如何默写好画人体?
- 深度 | 英伟达Titan Xp出现后,如何为深度学习挑选合适的GPU?这里有份性价比指南
- java jlist 添加滚动条_JList滚动条问题
- Python数据分析工具Pandas——数值计算和统计基础
- Error:All flavors must now belong to a named flavor dimension. Learn more at
- SQL基础系列(四)——多表查询
热门文章
- 【C/C++多线程编程之四】终止pthread线程
- python设置函数执行时间
- CSDN-markdown编辑器使用方法
- Bit-Z如何注册?【新手操作指南】
- GAN的理解与TensorFlow的实现
- php ajax 框架,PHP开发框架kohana中处理ajax请求的例子
- JZOJ 5389. 【NOIP2017提高A组模拟9.26】解梦
- android必须服务,说说在Android如何使用服务(Service)的方法
- mysql事务实战_MySQL - 实战 (2) - 事务隔离
- db2 日期英式写法_英文日期的写法