Manacher 演算法(馬拉車演算法)

2022-09-19 14:33:13 字數 591 閱讀 9462

參考部落格

該演算法可以在時間空間都為o(n),求出最大的回文子串

string longestpalindrome(string

s) str += "

^";//

字串首尾加上#,^不同字元避免越界判定

int len =str.size();

int max_len = -1;//

最大的回文長度

int id;//

最右邊的回文串的最中間

int mx = 0;//

最右邊的回文串的最右界限

int p[2009] ={};

for (int i = 1; i < len; i++)

else

while (str[i - p[i]] == str[i + p[i]])

if (mx < i + p[i])

if (p[i] - 1 > max_len)

}for (int i = start; i <= end; i++)

}return

ans;

}int

main()

Manacher 馬拉車演算法

給定乙個字串,求出其的最長回文子串 乙個將時間複雜度優化到o n 的演算法 暴力演算法,但不是純暴力,即按照做過的事情不再去做來優化 我們知道,乙個回文串要麼是奇數的串 aba 要麼是偶數的串 abba 可以看出,乙個回文串有乙個對稱軸 對於奇數串aba來說,對稱軸就是b 而對於偶數串abba來說,...

Manacher演算法(馬拉車)

演算法總結第三彈 manacher演算法,前面講了兩個字串相演算法 kmp和拓展kmp,這次來還是來總結乙個字串演算法,manacher演算法,我習慣叫他 馬拉車 演算法。相對於前面介紹的兩個演算法,manacher演算法的應用範圍要狹窄得多,但是它的思想和拓展kmp演算法有很多共通支出,所以在這裡...

馬拉車演算法manacher

1.預處理解決奇回文和偶回文問題 比如 str bcbaa 在每個字元的開頭,結尾和中間插入乙個特殊字元 來得到乙個新的字串 b c b a a 這樣對於原來字串中的奇回文 bcb 來說,在新的字串中變成了 b c b 還是奇回文,只是回文串長度從3變成了7 注意 中 i 1 0,與1按位與,如果i...