HDU3068 最長回文(manacher模板

2022-07-15 08:18:11 字數 1118 閱讀 7727

給出乙個只由小寫英文本元a,b,c...y,z組成的字串s,求s中最長回文串的長度.

回文就是正反讀都是一樣的字串,如aba, abba等

input輸入有多組case,不超過120組,每組輸入為一行小寫英文本元a,b,c...y,z組成的字串s

兩組case之間由空行隔開(該空行不用處理)

字串長度len <= 110000output每一行乙個整數x,對應一組case,表示該組case的字串中所包含的最長回文長度.

sample input

aaaa

abab

sample output

4

3

1

#define maxn 1000010

2 #include 3 #include 4 #include 5 #include 6

7using

namespace

std;89

char str[maxn] ;//

原字串

10char tmp[maxn << 1];//

轉換後的字串

11int len[maxn << 1

];12

13//

轉換原始串

14int init(char *st)

1523 tmp[2 * len + 1] = '#'

;24 tmp[2 * len + 2] = '

$';//

字串結尾加乙個字元,防止越界

25 tmp[2 * len + 3] = 0;26

return

2 * len + 1;//

返回轉換字串的長度27}

28//

manacher演算法計算過程

29int manacher(char *st, int

len)

3045 ans =max(ans, len[i]);46}

47return ans - 1;//

返回len[i]中的最大值-1即為原串的最長回文子串額長度 48}

4950

51int

main()

5258 }

HDU 3068 最長回文

題 目 鏈 接 看完後自己寫了一遍,感覺真的是很神奇的結論啊!本來這題看到可以用字尾陣列來寫的,但沒有學過,去看了一下,真心給暈了,決定找個機會認真研究下。我的 include include includeusing namespace std define min a,b a b a b cha...

HDU 3068 最長回文

存在o n 的演算法,學習了一下 include include includeusing namespace std const int maxn 300011 int n,p maxn char str maxn in maxn int main str 0 str 1 n n 2 2 str ...

HDU 3068 最長回文

problem description 給出乙個只由小寫英文本元a,b,c.y,z組成的字串s,求s中最長回文串的長度.回文就是正反讀都是一樣的字串,如aba,abba等 input 輸入有多組case,不超過120組,每組輸入為一行小寫英文本元a,b,c.y,z組成的字串s 兩組case之間由空行...