图解最长回文子串「Manacher 算法」,基础思路感性上的解析
问题描述:
给你一个字符串 s,找到 s 中最长的回文子串。
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
「Manacher 算法」的整体思路是:基于回文字符串的对称性,缓存前面字符的「臂长」信息,以便后面复用。
这里只以手绘小图片的方式简单讲解「Manacher 算法」
首先设想一个回文字符串,看下图
这个小人以身体为轴,左右对称,可以看作一个回文字符串(设想所有字符分布在其手臂和脖子上)。也就是以脖子为中心,左右对称。
脖子上的字符对应的臂长就是当前手臂的长度。
现在小人的左臂上有一个字符 a
思考如何利用回文串的对称性,快速得出 a
的最小臂长,也就是当 a
为脖子时,它的手臂至少是多长。
.......... 思考中 .........
如果已知右臂上所有字符的臂长,那么可以快速找到 a
的对称点 a'
a'
的臂长跟 a
的臂长之间的关系是什么?
在此图中的情况下,a
的臂长至少至少等于 a'
的臂长。只需要在这个臂长的基础上计算其臂长是否更大。
计算方法就是不断让自己的手臂延长,检查变成之后左右两手是否还相等
如果 a'
的臂长超过了原来的脖子呢
这个情况下,a
的基础臂长是 a'
到脖子的距离
其它边界情况请自行思考
图片是在 https://sketch.io/sketchpad/ 随手画的
图解最长回文子串「Manacher 算法」,基础思路感性上的解析的更多相关文章
- Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)
Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...
- 最长回文子串的Manacher算法
对于一个比较长的字符串,O(n^2)的时间复杂度是难以接受的.Can we do better? 先来看看解法2存在的缺陷. 1) 由于回文串长度的奇偶性造成了不同性质的对称轴位置,解法2要对两种情况 ...
- 51nod1089(最长回文子串之manacher算法)
题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1089 题意:中文题诶~ 思路: 我前面做的那道回文子串的题 ...
- 求最长回文子串:Manacher算法
主要学习自:http://articles.leetcode.com/2011/11/longest-palindromic-substring-part-ii.html 问题描述:回文字符串就是左右 ...
- 最长回文子串(Manacher算法)
回文字符串,想必大家不会不熟悉吧? 回文串会求的吧?暴力一遍O(n^2)很简单,但当字符长度很长时便会TLE,简单,hash+二分搞定,其复杂度约为O(nlogn), 而Manacher算法能够在线性 ...
- 计算字符串的最长回文子串 :Manacher算法介绍
转自: http://www.open-open.com/lib/view/open1419150233417.html Manacher算法 在介绍算法之前,首先介绍一下什么是回文串,所谓回文串,简 ...
- hihocoder #1032 : 最长回文子串【 manacher算法实现 】
#1032 : 最长回文子串 时间限制:1000ms 单点时限:1000ms 内存限制:64MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...
- 51Nod 1089 最长回文子串 V2 —— Manacher算法
题目链接:https://vjudge.net/problem/51Nod-1089 1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值: ...
- 51 Nod 1089 最长回文子串(Manacher算法)
1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 回文串是指aba.abba.cccbccc.aaa ...
随机推荐
- Deepin V20.1 解决安装Edge浏览器后更新系统报错的方法
问题描述:有些人在deepin系统上安装完edge浏览器后采用sudo apt update命令更新系统,却报出了错误,更新失败.原因是更新deepin系统的时候,最好把其它的源禁用了,不然会有各样的 ...
- CentOS7.9安装Oracle 12C数据库实战
准备工作(先安装好以下软件): 1.服务器操作系统 CentOS7.9 2.Shell工具:Xshell 7免费版 3.Xmanager 7软件 =========================== ...
- 九九乘法表(Java版)
3.九九乘法表 //九九乘法表 public class MultiplicationTables { public static void main(String[] args){ for (int ...
- Python 爬取页面内容
import urllib.request import requests from bs4 import BeautifulSoup url = "http://www.stats.gov ...
- vi正则表达式
搜索命令:/正则表达式 替换命令::s/正则表达式/替换字符串/选项 :%s/str1/str2/g 该命令中:表示进入命令行模式,%表示对该文件所有行有效,s表示查找并替换,正则表达式str1表 ...
- 异地远程访问群晖NAS中的文件
异地远程访问群晖NAS中的文件 我以群晖DS720+网络存储服务器为例,介绍我是如何异地远程访问群晖NAS中的文件的. 此文章只介绍部署操作的大概步骤,具体的操作方法和技巧可以在西瓜视频.抖音 ...
- Blazor 路由及导航开发指南
翻译自 Waqas Anwar 2021年4月2日的文章 <A Developer's Guide To Blazor Routing and Navigation> [1] 检查传入的请 ...
- springboot的单元测试(总结两种)
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- 关于解决numpy使用sklearn时的警告问题
关于解决numpy使用sklearn时的警告问题 在使用的时候,出现提示 :219: RuntimeWarning: numpy.ufunc size changed, may indicate bi ...
- 题解 Medium Counting
传送门 又是神仙DP 发现如果只有两个串就很好做了 于是这个神仙DP定义就从这里下手:令 $dp[p][c][l][r] 表示在 \([s_l, s_r]\) 这段字符串中,考虑从第 \(p\) 个位 ...