HDU 3068 最長回文(馬拉車模板題)

2021-08-26 08:50:24 字數 1057 閱讀 2701

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

附上馬拉車演算法講的不錯的部落格連線:

**:

#include

#include

#include

#include

#include

#include

using

namespace

std;

int manacher(string s)

vector

p(res.size(),0);//開乙個p陣列,長度為res的長度,初始化值為0

int mi=0,rig=0;//mi為當先回文串中心位置,rig為當前回文串能達到的最右端的值

int maxmi=0,maxlen=0;//maxmi記錄最長回文串的中心位置,maxlen記錄最長回文串的長度

for(int i=1;i2*mi-i],rig-i):1;//計算p[i]的關鍵**

while(res[i+p[i]]==res[i-p[i]])//i的回文串半徑可能會大於上方記錄的p[i],需要再向i兩邊擴充套件

if(rig//更新rig和mi的值

if(maxlen//更新maxlen和maxmi記錄的值

}return maxlen;

}int main()

嗯,馬拉車演算法和馬拉車毛的關係都沒有= =|||

HDU 3068 最長回文 馬拉車

題目大意 給出乙個字串s,求出s中的最長回文子串 題目分析 馬拉車模板題目,這個題目給的時間有點少,這個題目二分 雜湊應該也能搞過,但知道馬拉車之後就懶得再去寫了。大概就是這樣吧 include include include include include include include incl...

Hdu 3068 最長回文(馬拉車演算法模板題)

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

HDU 3068 最長回文

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