牛客 最長回文

2021-09-29 11:17:30 字數 872 閱讀 3053

傳送門

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

對兩個串分別跑manacher,然後我們列舉每個中心進行匹配。

以列舉a串的中心舉例,如果是選擇字母做中心,如果字母的位置為i,那麼b串的i應該匹配a(新)串的i-2;如果是以符號「#」為中心,那麼b串的i-1應該匹配的則是a串的i-1,注意l2=r1這個臨界條件。也就是說b串開始位置和a串的開始位置重合。

#include

using

namespace std;

const

int maxn=

2e6+50;

char a[maxn]

,newa[maxn]

;int p1[maxn]

;char b[maxn]

,newb[maxn]

;int p2[maxn]

;int

init1()

newa[j]

='\0'

;return j;

}int

init2()

newb[j]

='\0'

;return j;

}void

manacher1()

}void

manacher2()

}int

main()

printf

("%d\n"

,ans-1)

;return0;

}

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

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

牛客14894 最長回文 manacher馬拉車

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

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

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