給出乙個只由小寫英文本元a,b,c...y,z組成的字串s,求s中最長回文串的長度.
回文就是正反讀都是一樣的字串,如aba, abba等
input
輸入有多組case,不超過120組,每組輸入為一行小寫英文本元a,b,c...y,z組成的字串s
兩組case之間由空行隔開(該空行不用處理)
字串長度len <= 110000
output
每一行乙個整數x,對應一組case,表示該組case的字串中所包含的最長回文長度.
sample input
aaaa
abab
sample output
4
3
用manacher演算法解決
ac:
#include#include#include#include#include#include#include#include#include#define inf 99999999
using namespace std;
const int max=110000+10;
char s[max*2];
int p[max*2];
//插入了len+1個'#',最終的s長度是1~len+len+1即2*len+1,首尾s[0]和s[2*len+2]要插入不同的字元
//s[0]='*',s[len+len+2]='\0',防止在while時p[i]越界
int manacher(int len)
s[0]='*';
cout<} return 0;
}
HDU 3068 最長回文串
用的manacher法,o n 複雜度,證明跟kmp演算法一樣說不清 基本上是參考部落格鏈結 dp法記憶體不夠,中心擴充套件法時間不夠 manacher法 include include include include include include include include include ...
HDU 3068 最長回文串
解法1 根據是奇數串還是偶數串,遍歷中點,更新最長max值 複雜度o n 2 解法2 manacher 馬拉車演算法 o n 馬拉車演算法 1.中間插入 符號,統一變為奇數串規避奇偶問題 2.使用乙個輔助p陣列,p i 表示以 i 為中心的最長回文的半徑,p i 1正好是原字串中最長回文串的長度 3...
HDU 3068 最長回文
題 目 鏈 接 看完後自己寫了一遍,感覺真的是很神奇的結論啊!本來這題看到可以用字尾陣列來寫的,但沒有學過,去看了一下,真心給暈了,決定找個機會認真研究下。我的 include include includeusing namespace std define min a,b a b a b cha...