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