給你一個字符串 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