參考部落格
該演算法可以在時間空間都為o(n),求出最大的回文子串
string longestpalindrome(strings) 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...