最大回文字串長度 manacher演算法

2021-06-26 13:58:31 字數 605 閱讀 3818

參考:  

題目:   hdu3068

// hdu3068.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include #include #include using namespace std;

int longestpdr(vector& vc)

for (int i = 0; i < rda.size(); ++i) len = max(len, rda[i]);

return len;

}int _tmain(int argc, _tchar* argv)

vc.push_back('#');

cout << longestpdr(vc) << endl;

} return 0;

}

manacher演算法原理很簡單,對求最長回文字串,用dp和中心向兩邊擴散的時間複雜度都為o(n^2), manacher類似於中心向兩邊擴散法,但是又有不同,它利用了回文字串的對稱性,把已經求得的回文字串當作求其他回文字串的先驗知識,時間複雜度據說是o(n),但是證明起來還是有點困難,說起來不清不白的qaq....

C計算最大回文字串的長度

題目 輸入乙個字串和長度,求最大回文字串的長度 分析 manacher演算法 在原串中插入特殊字元 串中沒有的字元 就能把偶數長的串變成奇數 然後求乙個序列p,p i 為以i為中心,最長的回文串左端到i距離。在計算p i 時,假設之前求得的串的右端最右的乙個的中心為id,它的右端為mx,那麼從i向左...

最大回文字串

題目描述 輸入乙個字串,求出其中最長的回文。回文 正著看和倒著看相同,如abba和yyxyy 在判斷時,應該忽略所有標點符號和空格,且忽略大小寫,但輸出應保持原樣。輸入字串的長度不超過5000,且佔據單獨的一行。ying g輸出最長的回文串,如果有多個,輸出起始位置最左邊的。樣例輸入 confuci...

leetcode練習5(最大長度的回文字串)

題目 給定乙個字串,輸出其中長度最大的回文字串。題解 1 遍歷字串,檢查以字串的某個 某相鄰兩個 字元為中心,向字串左右展開,是否滿足回文字串的要求 class solution void count else else if str i str i 1 若回文字串無中心單字元 else if co...