牛客14894 最長回文 manacher馬拉車

2021-10-08 10:34:11 字數 766 閱讀 9997

有兩個長度均為n的字串a和b。可以從a中選乙個可以為空的子串a[l1…r1],b中選乙個可以為空的子串b[l2…r2],滿足r1=l2,然後把它們拼起來(a[l1…r1]+b[l2…r2])。求用這樣的方法能得到的最長回文串的長度。注意:求的不是本質不同的回文串個數哦!!!

第一行乙個數n

第二行表示字串a

第三行表示字串b

輸出一行乙個數表示答案

分別對兩個字串進行manacher預處理,找到他們自身回文的p陣列

我們需要注意的r1=l2,即子串a和子串b的下標是連續遞增的,且子串a的最後乙個字元會被子串b的第乙個字元覆蓋,故匹配時,b字串需要-2,因為經過manacher預處理,中間多了個『#』字元,且我們可以以此字元的下標為中心,兩邊對稱的匹配字串,找到最大的回文串長度。

#pragma gcc optimize(2)

#include

#define ll long long

#define endl '\n'

using

namespace std;

vector<

int>p1,p2;

void

manacher

(string &t,vector<

int>

&p) t=s;

}int

main()

cout<}

牛客 最長回文

傳送門 有兩個長度均為n的字串a和b。可以從a中選乙個可以為空的子串a l1 r1 b中選乙個可以為空的子串b l2 r2 滿足r1 l2,然後把它們拼起來 a l1 r1 b l2 r2 求用這樣的方法能得到的最長回文串的長度。注意 求的不是本質不同的回文串個數哦!對兩個串分別跑manacher,...

牛客競賽 最長回文(馬拉車)

題目描述 有兩個長度均為n的字串a和b。可以從a中選乙個可以為空的子串a l1 r1 b中選乙個可以為空的子串b l2 r2 滿足r1 l2,然後把它們拼起來 a l1 r1 b l2 r2 求用這樣的方法能得到的最長回文串的長度。注意 求的不是本質不同的回文串個數哦!輸入描述 第一行乙個數n 第二...

牛客網最長回文子串(Python實現)

題目描述 對於乙個字串,請設計乙個高效演算法,計算其中最長回文子串的長度。給定字串a以及它的長度n,請返回最長回文子串的長度。測試樣例 abc1234321ab 12 返回 7 coding utf 8 class palindrome def getstr self,a,n 定義getstr方法求...