最長回文 (Manacher's Algorithm)
(string/manacher.hpp)
Manacher’s Algorithm
列が与えられたとき、各文字を中心とする回文の半径の最大値を求める。
vector<int> manacher(const T &A)
長さ $N$ の列 $A$ を引数に取り、長さ $N$ の配列を返す。
返り値の $i$ 番目の要素は、$A[i-k+1,i+k-1]$ が回文であるような $k$ の最大値である。
時間計算量は $O(N)$ である。
資料
あなたは嘘つきですかと聞かれたら「YES」と答えるブログ
Verified with
Code
Back to top page