傳送門
有兩個長度均為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方法求...