牛客 最长回文

通过从两个字符串A和B中选取子串拼接,并保证回文性质,求解能组成的最长回文串长度。使用Manacher算法分别处理A和B,枚举中心并进行匹配,注意字符与符号中心的不同匹配规则。
摘要由CSDN通过智能技术生成

传送门
有两个长度均为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<bits/stdc++.h>
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(){
   
	int len=strlen(a);
	newa[0]='$';
	newa[1]='#';
	int j=2;
	for(int i=0;i<len;i++){
   
		newa[j
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值