當前位置:
首頁 >
Manacher 最长回文子串
發布時間:2024/4/18
38
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Manacher 最长回文子串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用途
- 求最長回文串, 過程中更新max(Maxlen,RL[i]?1)max(Maxlen,RL[i]-1)max(Maxlen,RL[i]?1)
- 求回文串的數量,∑i=0lenRL[i]2\sum_{i=0}^{len}\frac{RL[i]}{2}∑i=0len?2RL[i]?
RL[i]RL[i]RL[i] :關于i的回文半徑
MaxRightMaxRightMaxRight:pos能到達的最右端的位置
MaxLenMaxLenMaxLen:記錄答案
- 首先在原字符串中插入字符“#”
例如:“abba” -> "#a#b#b#a#"這樣不影響回文串,好處是可以同時解決長度為奇偶的字符串,而且(回文半徑 - 1)就是原來的回文串長度 - 問題轉化為如何高效的求每個字符的回文串半徑,當我們知道pos能到達的最右端位置MaxRightMaxRightMaxRight,我們繼續向后枚舉字符串求它的回文半徑,我們關心的是i這個位置是在MaxRight的左邊還是右邊, 在左邊分為兩種情況,右邊一種情況。
- 求出來最小值之后再向兩邊擴展得到最長的回文半徑, 然后更新pospospos,MaxRightMaxRightMaxRight。
總結
以上是生活随笔為你收集整理的Manacher 最长回文子串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ 2154 Crash的数字表格
- 下一篇: 修复kali grub引导