回文字符串 Manacher
1. Manacher
忘光了,忘光了。
首先将字符串所有字符之间(包括头尾)插入相同分隔符,再在最前方插入另一个分隔符防止越界。
设以 \(s_i\) 为对称中心的回文串中,最长的回文半径为 \(p_i\)。记录在所有遍历过的位置中(\(1\sim i-1\)),以任意一个点为对称中心的回文串的右端点最大值 \(r\),即 \(r=\max_{j=1}^{i-1}s_j+p_j-1\),记 \(d\) 即为取到这个最大值的对称中心。注意 \(r\) 和 \(d\) 是实时更新的。
对于当前位置 \(i\):
若 \(i>r\),则暴力求 \(p_i\),此时每次扩展都会将 \(r\) 向右移动 \(1\);
若 \(i\leq r\),则先将 \(p_i\) 赋值为 \(\min(r-i+1,p_{2d-i})\),再逐位扩展。
说明:因为位置 \(2d-i\) 与 \(i\) 是对称的(在 \(d\) 的最长回文半径范围内),所以在 \([d-p_d+1,d+p_d-1\ (r)]\) 范围内,\(2d-i\) 的回文串也是 \(i\) 的回文串。若 \(p_{2d-i}<r-i+1\),那么根据对称性,\(p_i\) 的最终值就等于 \(p_{2d-i}\)。否则 \(p_i=r-i+1\),每次扩展都会将 \(r\) 向右移动 \(1\)。
综上,总时间复杂度为 \(\mathcal{O}(n)\)。
回文字符串 Manacher的更多相关文章
- 最长回文字符串(manacher算法)
偶然看见了人家的博客发现这么一个问题,研究了一下午, 才发现其中的奥妙.Stupid. 题目描述: 回文串就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串. ...
- 第5题 查找字符串中的最长回文字符串---Manacher算法
转载:https://www.felix021.com/blog/read.php?2040 首先用一个非常巧妙的方式,将所有可能的奇数/偶数长度的回文子串都转换成了奇数长度:在每个字符的两边都插入一 ...
- 【转载】最长回文字符串(manacher算法)
原文转载自:http://blog.csdn.net/lsjseu/article/details/9990539 偶然看见了人家的博客发现这么一个问题,研究了一下午, 才发现其中的奥妙.Stupid ...
- 最长子回文字符串(Manacher’s Algorithm)
# # 大佬博客: https://www.cnblogs.com/z360/p/6375514.html https://blog.csdn.net/zuanfengxiao/article/det ...
- hdu3068 求一个字符串中最长回文字符串的长度 Manacher算法
最长回文 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- Manacher算法:求解最长回文字符串,时间复杂度为O(N)
原文转载自:http://blog.csdn.net/yzl_rex/article/details/7908259 回文串定义:"回文串"是一个正读和反读都一样的字符串,比如&q ...
- [LeetCode] Valid Palindrome 验证回文字符串
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...
- hdu----(3068)最长回文(manacher)
最长回文 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 九度OJ 1528 最长回文子串 -- Manacher算法
题目地址:http://ac.jobdu.com/problem.php?pid=1528 题目描述: 回文串就是一个正读和反读都一样的字符串,比如"level"或者"n ...
随机推荐
- Promise.resolve(x)中x有几种情况
ps:下面参数说的是Promise.resolve(x)中的x 一共四种情况: 1.如果参数是Promise实例本身,则抛出错误 2.如果参数是一个promise对象,则then函数的执行取决于这个参 ...
- netty系列之:netty对http2消息的封装
目录 简介 http2消息的结构 netty对http2的封装 Http2Stream Http2Frame 总结 简介 无论是什么协议,如果要真正被使用的话,需要将该协议转换成为对应的语言才好真正的 ...
- 合理占用服务器空闲GPU[狗头]
合理占用服务器GPU资源[狗头] 场景:当你想进行模型训练时,发现GPU全被占用,怎么办? 解决方案1: 在终端输入如下命令:watch -n 设定刷新时间(s) nvidia-smi 然后记起来了回 ...
- 第5次 Beta Scrum Meeting
本次会议为Beta阶段第6次Scrum Meeting会议 会议概要 会议时间:2021年6月6日 会议地点:「腾讯会议」线上进行 会议时长:10min 会议内容简介:对完成工作进行阶段性汇报:对下一 ...
- spring cache整合redis
在项目中,我们经常需要将一些常用的数据使用缓存起来,避免频繁的查询数据库造成效率低下.spring 为我们提供了一套基于注解的缓存实现,方便我们实际的开发.我们可以扩展spring的cache接口以达 ...
- Docker制作能够ssh连接的镜像
本类文章只作为记录使用 命令操作: #拉取Centos 7 docker pull centos:7 #运行一个镜像 docker run -tdi --privileged centos:7 ini ...
- dice_game攻防世界进阶区
dice_game XCTF 4th-QCTF-2018 前言,不得不说,虽然是个简单题但是还是要记录一下,来让自己记住这些东西. 考察的知识点是: 1.cdll_loadlibrary加载对应库使得 ...
- 设计的MOS管三极管简单开关电路驱动能力不够2
设计的MOS管三极管简单开关电路驱动能力不够 [复制链接] lxizj 9 主题 454 帖子 1783 积分 四级会员(40) 积分 1783 发消息 16# 发表于 2012-4-23 ...
- max-points-on-a-line leetcode C++
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. ...
- Oracle创建表、删除表、修改表、字段增删改 语句总结
创建表: create table 表名 ( 字段名1 字段类型 默认值 是否为空 , 字段名2 字段类型 默认值 是否为空, 字段名3 字段类型 默认值 是否为空, ...... ); 创建一个us ...