最長雙回文串 manacehr

2022-09-01 10:36:12 字數 1075 閱讀 7802

【題目描述】

順序和逆序讀起來完全一樣的串叫做回文串。比如 acbca 是回文串,而 abc 不是(abc 的順序為 「abc」,逆序為 「cba」,不相同)。

輸入長度為 n 的串 s,求 s 的最長雙回文子串 t, 即可將 t 分為兩部分 x,y,(|x|,|y|≥1)且 x 和 y 都是回文串。

【輸入格式】

一行由小寫英文本母組成的字串 s。

【輸出格式】

一行乙個整數,表示最長雙回文子串的長度。

【樣例輸入】

baacaabbacabb

【樣例輸出】

【資料範圍與提示】

對於 10% 的資料,2≤|s|≤103。

對於 30% 的資料,2≤|s|≤104。

對於 100% 的資料,2≤|s|≤105。

跑一遍 manacehr,然後分別 dp 存下以 $ i $ 為對稱中心時的回文串長度,記錄在左端點和右端點上,取兩端回文串最大值即可

1 #include2

#define ll long long

3#define _(d) while(d(isdigit(ch=getchar())))

4using

namespace

std;

5int

r()8

const

int n=3e5+5;9

intn,len,p[n],mx,id,f[n],g[n],ans;

10char

ch[n],s[n];

11void

manacher()23}

24int

main()

34 mx=n;

35for(int i=n;i;i--)

36if(i-p[i]

41for(int i=1;i<=n;i++)

42if(s[i]!='#'

)43 ans=max(f[i]+g[i+2

],ans);

44 cout

45return0;

46 }

view code

最長雙回文串

題目描述 順序和逆序讀起來完全一樣的串叫做回文串。比如acbca是回文串,而abc不是 abc的順序為 abc 逆序為 cba 不相同 輸入長度為n的串s,求s的最長雙回文子串t,即可將t分為兩部分x,y,x y 1 且x和y都是回文串。對於 10 的資料,2 s 10 3 對於 30 的資料,2 ...

最長雙回文串

題目大意 輸入長度為n的串s,求s的最長雙回文子串t,即可將t分為兩部分x,y,x y 1 且x和y都是回文串。題解 若x,y都是回文串且相鄰,則共用乙個 可以對於每個 找出其左邊界和右邊界。include include include using namespace std define n 1...

最長雙回文串

題目描述 順序和逆序讀起來完全一樣的串叫做回文串。比如acbca是回文串,而abc不是 abc的順序為 abc 逆序為 cba 不相同 輸入長度為n的串s,求s的最長雙回文子串t,即可將t分為兩部分x,y,x y 1 且x和y都是回文串。對於 10 的資料,2 s 10 3 對於 30 的資料,2 ...