Manacher (最长回文序列)
https://www.cnblogs.com/grandyang/p/4475985.html
思路是学习的是上面博客的想法,思路很清晰 优化的方法和exkmp有异曲同工的地方
博客里的内容我在这里就不重复累赘的叙述了,浪费时间
我们需要只要关键数组p[]表示位置为i的字符串的半径,并且我们需要记住以下几个性质
1.最长子串的长度为最长半径减1(用来求长度)
2.起始位置是中间位置减去半径再除以2(用来求字符串)
int p[]; //记录半径
void manacher(string s){
string ma="";
ma+='$';
ma+='#';
int len=s.length();
//预处理字符串 加#是为了让长度变为奇数(避免讨论奇偶)
//二加$则是为了求字符串的起始位置 在博客中有相关叙述
for(int i=;i<len;i++){
ma+=s[i];
ma+='#';
}
int po=; int mx=; //po记录当前可以延伸到最右端的点 mx为长度
len=ma.length();
for(int i=;i<len;i++){
p[i]=mx>i?min(p[*po-i],mx-i):; //关键代码 在博客中理解
while(ma[i+p[i]]==ma[i-p[i]]) p[i]++;
if(i+p[i]>mx){ //更新
mx=i+p[i];
po=i;
}
}
}
Manacher (最长回文序列)的更多相关文章
- manacher最长回文序列c++
算法真心读不懂 #include <iostream>#include<string>#include<cstring> using namespace std;c ...
- 利用Manacher算法寻找字符串中的最长回文序列(palindrome)
寻找字符串中的最长回文序列和所有回文序列(正向和反向一样的序列,如aba,abba等)算是挺早以前提出的算法问题了,最近再刷Leetcode算法题的时候遇到了一个(题目),所以就顺便写下. 如果用正反 ...
- ~psd面试 求最长回文序列 DP求解
链接:https://www.nowcoder.com/acm/contest/90/D来源:牛客网 掌握未来命运的女神 psd 师兄在拿了朝田诗乃的 buff 后决定去实习. 埃森哲公司注册成立于爱 ...
- Codeforces Round #538 (Div. 2) D. Flood Fill 【区间dp || LPS (最长回文序列)】
任意门:http://codeforces.com/contest/1114/problem/D D. Flood Fill time limit per test 2 seconds memory ...
- hdu----(4513)吉哥系列故事——完美队形II(manacher(最长回文串算法))
吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)To ...
- HDU 3068 (Manacher) 最长回文
求一个字符串的最长子串,Manacher算法是一种O(n)的算法,很给力! s2[0] = '$',是避免在循环中对数组越界的检查. 老大的代码: http://www.cnblogs.com/Big ...
- Manacher 最长回文子串。
最长回文子串就是一个字符串的一个子串,他从左往右读和从右往左读是一样的. 可以用 Manacher 算法来求,他的复杂度是 O(n) . 可以看这篇文章 http://blog.csdn.net/yw ...
- Hdu 3294 Girls' research (manacher 最长回文串)
题目链接: Hdu 3294 Girls' research 题目描述: 给出一串字符串代表暗码,暗码字符是通过明码循环移位得到的,比如给定b,就有b == a,c == b,d == c,.... ...
- HDU 3068 最长回文 (Manacher最长回文串)
Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如aba, abba等 Input 输 ...
随机推荐
- 3 Asking for more information
1 Could you tell me more about your idea? 2 Could I hear more about your idea? 3 Could you expain yo ...
- Thread类相关方法
线程对象 每一个线程都是和类Thread的实例相关联的.在Java中,有两种基本的使用Thread对象的方式,可用来创建并发性程序. 1.在应用程序需要发起异步任务的时候,只要生成一个Thread对 ...
- Oracle的数据类型详述
数据类型 (1)字符型 CHAR: 定长最多(2000字节)特定情况下用 VARCHAR2:可变长度的字符串最多(4000字节) LONG:大文本类型最多(2个G) (2)数值型 NUMBER:可以是 ...
- mybatis一级缓存详解
mybatis缓存分为一级缓存,二级缓存和自定义缓存.本文重点讲解一级缓存 一:前言 在介绍缓存之前,先了解下mybatis的几个核心概念: * SqlSession:代表和数据库的一次会话,向用户提 ...
- sqlserver常用语法
--临时表 IF OBJECT_ID('tempdb..#Entry') is not null BEGIN DROP TABLE #Entry END ------------------- ...
- C# Note34: 异常机制相关小点
1.使用throw和throw ex抛出异常的区别 通常,我们使用try/catch/finally语句块来捕获异常,那么在抛出异常的时候,使用throw和throw ex有什么区别呢? 假如,按顺序 ...
- python数据结构与算法第十四天【二分查找】
1.二分查找的原理 对于已经排序的列表进行最快速度的查找 2. 代码实现 (1)递归实现 def binary_search(alist, item): if len(alist) == 0: ret ...
- vue-cli(vue脚手架)
vue-cli用于自动生成vue+webpack项目. 安装webpack:npm install webpack -g 检查webpack是否安装成功和版本:webpack -v 如果是webpac ...
- 在一般类中通过XmlWebApplicationContext对象获取应用部署上下文Context
XmlWebApplicationContext xwac = (XmlWebApplicationContext) ContextLoader.getCurrentWebApplicationCon ...
- docker-安装技巧
使用官方脚本安装 curl -fsSL "https://get.docker.com/" | sh 使用yum 安装是可以查看版本 yum list docker-ce.x86_ ...