字符串进阶算法小结
时间:2021-02-17 15:06:24
收藏:0
阅读:0
前言:
本文参考《信息学奥赛一本通·金牌导航》。
正文:
Manacher 算法:
概念:
Manacher 算法,经常被称作马拉车,可以以 \(\mathcal{O}(n)\) 的时间复杂度求出字符串关于回文子串一类的问题。
介绍:
首先举个例子,设字符串 \(s=\texttt{bbdkd}\)。
在这里面,有偶回文子串 \(\texttt{bb}\)、奇回文子串 \(\texttt{dkd}\),在计算的过程中还要对奇偶问题进行讨论太过于麻烦,所以可以在每个字符之间加入特殊字符(首尾特殊字符可以作边界):
\[s‘=\texttt{\$#b#b#d#k#d#@}
\]
再设 \(R_i\) 表示以第 \(i\) 位字符为中心的最长回文的半径。对应上面的 \(s‘\) 可以得到:
\[R=\{1,2,3,2,1,2,1,4,1,2,1\}
\]
评论(0)