Manachar's Algorithm
1、模板
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int MAX=21000020;
4 char s[MAX],t[MAX<<1];
5 int p[MAX<<1],cnt=0,mid,mr;
6 void manachar()
7 {
8 t[cnt++]='$';
9 int len=strlen(s);
10 for(int i=0;i<len;i++)
11 {
12 t[cnt++]='#';
13 t[cnt++]=s[i];
14 }
15 t[cnt++]='#';
16 t[cnt]='\0';
17
18 for(int i=0;i<cnt;i++)
19 {
20 p[i]=i<mr?min(p[(mid<<1)-i],mr-i):1;
21 for(;t[p[i]+i]==t[i-p[i]] and p[i]+i<cnt;p[i]++)
22 if(p[i]+i>mr)
23 {
24 mid=i;
25 mr=p[i]+i;
26 }
27 }
28 }
29 int main()
30 {
31 scanf("%s",s);
32 manachar();
33 int ans=1;
34 for(int i=0;i<cnt;i++)
35 ans=max(ans,p[i]);
36 printf("%d",ans-1);
37 return 0;
38 }
2、一些结论
1、在往后推maxr时,此时的p[i]就是以maxr为结尾的最长回文串(例题:最长双回文串(有坑))
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int MAX=1e5+10;
4 char pic[MAX],s1[MAX<<1],s2[MAX<<1];
5 int p1[MAX<<1],p2[MAX<<1],cnt=2;
6 int ans1[MAX<<1] ,ans2[MAX<<1],len;
7 void manachar(char * s,int * p,int * ans)
8 {
9 int mid=0,mr=0;
10 for(int i=0;i<cnt;i++)
11 {
12 p[i]=i<mr?min(p[mid*2-i],mr-i):1;
13 for(;s[p[i]+i]==s[i-p[i]];p[i]++)
14 if(i+p[i]>mr)
15 {
16 mr=i+p[i];
17 ans[mr]=p[i];
18 mid=i;
19 }
20 }
21 }
22 int main()
23 {
24 scanf("%s",pic);
25 len=strlen(pic);
26 s1[0]=s2[0]='$';
27 s1[1]=s2[1]='#';
28 for(int i=0;i<len;i++)
29 {
30 s1[cnt]=pic[i];
31 s2[cnt]=pic[len-i-1];
32 s1[++cnt]='#';
33 s2[cnt++]='#';
34 }
35 cnt++;
36 s1[cnt]=s2[cnt]='\0';
37 manachar(s1,p1,ans1);
38 manachar(s2,p2,ans2);
39 int j=cnt-4,ans=2;
40 for(int i=3;i<cnt-2;i++)
41 {
42 if(s1[i]=='#')
43 ans=max(ans,ans1[i]+ans2[j]);
44 j--;
45 }
46 cout<<ans<<endl;
47 return 0;
48 }
2、
Manachar's Algorithm的更多相关文章
- Manachar’s Algorithm
Manachar's Algorithm Longest palindromic substring - Wikipedia https://en.wikipedia.org/wiki/Longes ...
- bzoj 3676 回文串 manachar+hash
考虑每个回文串,它一定是它中心字母的最长回文串两侧去掉同样数量的字符后的一个子串. 所以我们可以用manachar求出每一位的回文半径,放到哈希表里并标记出它的下一个子串. 最后拓扑排序递推就行了.. ...
- BZOJ 2342 & manachar+最优性剪枝
题意: 求最长回文串,串的两边都是回文串. Solution: manachar预处理然后暴力找... Code: #include <iostream> #include <cst ...
- bzoj 3160: 万径人踪灭 manachar + FFT
3160: 万径人踪灭 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 133 Solved: 80[Submit][Status][Discuss] ...
- hdu 3068 最长回文(manachar模板)
Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如aba, abba等 Input 输 ...
- HDU 3294 Girls' research(manachar模板题)
Girls' researchTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- HDU 3068 最长回文(manachar算法)
最长回文 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- Manachar算法详解
求解最长回文串之Manachar算法 问题类型: 输入一个字符串,求出其中最大的回文子串.子串的含义是:在原串中连续出现的字符串片段. 回文的含义是:正着看和倒着看相同,如abba和yyxyy. 这类 ...
- hdu 4513 吉哥系列故事——完美队形II (manachar算法)
吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) P ...
随机推荐
- XSS跨站脚本攻击(1)
将跨站脚本攻击缩写为XSS,恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面的时候,嵌入其中的Web里面的Script代码就会被执行,从而达到恶意攻击用户的目的. 反射型XSS 反射 ...
- Python镜像源集合——镜像源更改方法
python在线安装库时会较慢,那是因为python的默认镜像源在国外,因此会慢:而国内有很多可以用的python镜像源,将python镜像源更改为国内的,则可以大大加快python库的安装速度. 1 ...
- 纯生js实现Element中input组件的部分功能(慢慢完善)并封装成组件
现在实现的有基础用法.可清空.密码框,参考链接:https://element.eleme.cn/#/zh-CN/component/input HTML代码:想要测试哪个组件,直接将对应组件解开注释 ...
- python2与python3共存时的pip问题
在树莓派上同时安装有python2和python3,初始的pip是9.01版本,用pip install django只能安装到1.11版本,但是我需要2.0的django. 于是升级pip: pyt ...
- 细说MySQL连接查询:内连、左连和右连
转: 细说MySQL连接查询:内连.左连和右连 简介: MySQL 的连接查询,通常都是将来自两个或多个表的行结合起来,基于这些表之间的共同字段,进行数据的拼接.首先,要确定一个主表作为结果集,然后将 ...
- AQS源码解读(ReentrankLock的公平锁和非公平锁)
构建Debug代码: 1 package com.hl.interview.lock; 2 3 import java.util.Scanner; 4 import java.util.concurr ...
- Arrays.Sort()中的那些排序算法
本文基于JDK 1.8.0_211撰写,基于java.util.Arrays.sort()方法浅谈目前Java所用到的排序算法,仅个人见解和笔记,若有问题欢迎指证,着重介绍其中的TimSort排序,其 ...
- POJ1458 Common Subsequence
题目链接:http://poj.org/problem?id=1458 分析:最大公共子序列模板 1 #include<iostream> 2 #include<sstream> ...
- golang 实现求两向量夹角
type Vector3 struct { X float64 `json:"x"` Y float64 `json:"y"` Z float64 `json: ...
- 2、Spring教程之HelloSpring
导入Jar包 注 : spring 需要导入commons-logging进行日志记录 . 我们利用maven , 他会自动下载对应的依赖项 . <dependency> <grou ...