hdu 3068 最長回文子串O n

2021-09-06 08:51:12 字數 802 閱讀 3969

感覺這篇部落格寫的不錯:

我就直接上**了。。。

1 #include2 #include3

const

int n=110010;4

using

namespace

std;

5int

len;

6int p[n<<1];7

char s[n],str[n<<1];8

//陣列p[i]來記錄以字元str[i]為中心的最長回文子串向左(或向右)(包括str[i])的長度9//

id表示最大回文子串中心的位置

10//

mx則為id+p[id],也就是最大回文子串的邊界

1112

//最長回文子串o(n)求法

13void

manacher()else

19 p[i]=1;20

for(;str[i+p[i]]==str[i-p[i]];p[i]++);

21if(p[i]+i>mx)25}

26}2728

intmain()

37 len=(len<<1)+2

;38 str[len]='\0'

;39manacher();

40int ans=-1;41

for(int i=0;i)

44 printf("

%d\n

",ans-1

);45}46

return0;

47 }

HDU 3068 最長回文 最長回文子串

和上一題一樣,不過這題只是要求最長回文子串的長度 在此採用了非常好用的manacher演算法 據說還是o n 的效率qaq 詳細用法參考了上篇部落格的參考資料,這兩天有空學習一下 source code pragma comment linker,stack 16777216 for c compi...

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...