P3805 【模板】manacher算法
生活随笔
收集整理的這篇文章主要介紹了
P3805 【模板】manacher算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
思路
manache的板子
manacher是一種能在O(n)的時間復雜度內求出最長回文子串的一種算法
首先要在每個串之間加上'#',使得奇數長度和回文串和偶數長度的回文串可以被統一考慮
之后要在首位加上'%',便于對出現位置進行討論
比如axa變為%#a#x#a#'\0'
算法過程和p[i](表示以i為中心的最長回文子串的半徑)相關
畫圖發現,i為中心的最長回文子串的長度是p[i]-1,開始位置是(i-p[i])/2
然后manacher算法的核心就是這句
mx是回文串右端點能延伸到的最遠的位置,id是右端點能延伸到的最長回文串的中間位置,
如果mx-i>p[2*id-i],證明相對于id和i對稱的回文串被id完全包括,由id的對稱性可知p[i]=p[2*id-i]
如果mx-i<p[2*id-i],證明沒有被完全包括,最長的回文最少是mx-i,然后由后面的while循環繼續匹配
如果mx<=i,則無法做出任何假設,只能讓p[i]=1然后由后面的while暴力匹配
轉載于:https://www.cnblogs.com/dreagonm/p/10510871.html
總結
以上是生活随笔為你收集整理的P3805 【模板】manacher算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 熬好的鸡汤能保存多久
- 下一篇: 鼎盛的意思