P3805 【模版】manacher算法

题目描述

给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.

字符串长度为n

输入输出格式

输入格式:

一行小写英文字符a,b,c...y,z组成的字符串S

输出格式:

一个整数表示答案

输入输出样例

输入样例#1:

aaa

输出样例#1:

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)相关推荐

  1. 通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)

    1. 回文串 作为程序员,回文串这个词已经见怪不怪了,就是一个字符串正着读和反着读是一样的,形式如abcdcba.bbaabb.这里涉及到奇回文和偶回文,奇回文指回文串的字符数是奇数,偶回文指回文串的 ...

  2. java 最长回文串_通俗易懂的最长回文串图解、说明及Java代码(中心扩散法和Manacher算法)...

    1. 回文串 作为程序员,回文串这个词已经见怪不怪了,就是一个字符串正着读和反着读是一样的,形式如abcdcba.bbaabb.这里涉及到奇回文和偶回文,奇回文指回文串的字符数是奇数,偶回文指回文串的 ...

  3. Manacher算法 - 求最长回文串的利器

    求最长回文串的利器 - Manacher算法 Manacher主要是用来求某个字符串的最长回文子串. 不要被manacher这个名字吓倒了,其实manacher算法很简单,也很容易理解,程序短,时间复 ...

  4. P3805 【模板】manacher算法

    思路 manache的板子 manacher是一种能在O(n)的时间复杂度内求出最长回文子串的一种算法 首先要在每个串之间加上'#',使得奇数长度和回文串和偶数长度的回文串可以被统一考虑 之后要在首位 ...

  5. manacher算法学习(求最长回文子串长度)

    Manacher总结 我的代码 学习:yyb luogu题目模板 xzy的模板 #include<iostream> #include<cstdlib> #include< ...

  6. 字符串-Manacher算法(你知道马拉车算法吗?)

    文章目录 原理 奇偶问题 p[]数组 马拉车求p[] 模板 例题 P3805 [模板]manacher算法 P1659 拉拉队排练 原理 马拉车算法当然不是马拉着车的奇奇怪怪的东西,是Manacher ...

  7. Manacher算法

    目录 Manacher算法 算法思想 求LLL数组 例题 Manacher算法 描述: Manacher 算法用于求解字符串中最长回文子串的问题. 在了解该算法之前需要明白一些基本概念: 回文串:对于 ...

  8. manacher算法----O(n)最长回文串

    manacher算法----O(n)最长回文串 分类:字符串 (126)  (0)  举报  收藏 manacher的时间复杂度为O(n),后缀数组好像可以处理O(nlogn),但是有些变态题目可能卡 ...

  9. 谈谈我对Manacher算法的理解

    Manacher算法其实是求字符串里面最长的回文. ①在学习该算法前,我们应该知道回文的定义:顺序读取回文和逆序读取回文得到的结果是一样的,如:abba,aba. 那么我们不难想到,在判断一个字符串s ...

最新文章

  1. 上证所Level-2在信息内容和传送方式方面的比较优势[逐笔数据与分笔数据的根本区别]...
  2. mysql5.623 GTID主从复制+半同步复制安装与配置
  3. eclipse服务器添加项目工程,eclipse创建和发布web项目(示例代码)
  4. 第一天 echo test (()) [[]]
  5. OpenCV探索之路(六):图像变换——霍夫变换
  6. 【读书笔记】—— 《从 0 到 1》
  7. 全网首发:MAC上运行SHELL脚本,typeset -l报错
  8. 计算机硬盘扇区修复,w7硬盘坏道修复详细教程
  9. python过滤器_python中的Butterworth过滤器
  10. 解决win10桌面无法删除ie浏览器图标
  11. 2020年全球及中国干细胞医疗行业发展现状及竞争情况分析,美国领先于世界,北上广领先于中国「图」
  12. java xap_阻止xap文件在浏览器中缓存
  13. 奇安信天擎的退出以及卸载
  14. git中误提交了不想提交的文件,想要从版本库中删除的方法
  15. 默写人体的方法有哪些?如何默写好画人体?
  16. 深度 | 英伟达Titan Xp出现后,如何为深度学习挑选合适的GPU?这里有份性价比指南
  17. java jlist 添加滚动条_JList滚动条问题
  18. Python数据分析工具Pandas——数值计算和统计基础
  19. Error:All flavors must now belong to a named flavor dimension. Learn more at
  20. SQL基础系列(四)——多表查询

热门文章

  1. 【C/C++多线程编程之四】终止pthread线程
  2. python设置函数执行时间
  3. CSDN-markdown编辑器使用方法
  4. Bit-Z如何注册?【新手操作指南】
  5. GAN的理解与TensorFlow的实现
  6. php ajax 框架,PHP开发框架kohana中处理ajax请求的例子
  7. JZOJ 5389. 【NOIP2017提高A组模拟9.26】解梦
  8. android必须服务,说说在Android如何使用服务(Service)的方法
  9. mysql事务实战_MySQL - 实战 (2) - 事务隔离
  10. db2 日期英式写法_英文日期的写法