给你一个字符串 s,找到 s 中最长的回文子串。
连接:https://leetcode-cn.com/problems/longest-palindromic-substring算法
这里只以手绘小图片的方式简单讲解「Manacher 算法」缓存
这个小人以身体为轴,左右对称,能够看做一个回文字符串(设想全部字符分布在其手臂和脖子上)。也就是以脖子为中心,左右对称。code
脖子上的字符对应的臂长就是当前手臂的长度。blog
a
思考如何利用回文串的对称性,快速得出 a
的最小臂长,也就是当 a
为脖子时,它的手臂至少是多长。图片
.......... 思考中🤔 .........leetcode
a
的对称点 a'
a'
的臂长跟 a
的臂长之间的关系是什么?在此图中的状况下,a
的臂长至少至少等于 a'
的臂长。只须要在这个臂长的基础上计算其臂长是否更大。字符串
计算方法就是不断让本身的手臂延长,检查变成以后左右两手是否还相等get
a'
的臂长超过了原来的脖子呢这个状况下,a
的基础臂长是 a'
到脖子的距离
string
图片是在 https://sketch.io/sketchpad/ 随手画的io