最長回文串 hdu3068

2021-09-07 03:54:11 字數 851 閱讀 5027

給出乙個只由小寫英文本元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...