解题思路
这题可以采用比较暴力的方法,反正实现时间是2s。
我们可以用长的小的字符串暴力构造子串,然后依次判断它是否为回文串,是否与A的子串匹配。
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cstring>
#include<cmath>
#include<map>
#include<queue>
#define ll unsigned long long
using namespace std;
int tot=0,ans=0,n,m;
char a[100010],b[100010],v[100010];
bool check()
{
int x=1;
for(int i=1;i<=m;i++)
{
if(a[i]==v[x])x++;
if(x>tot)
return 1;
}
return 0;
}
void dfs(int dep){
if(dep>n)
{
for(int i=1;i<=tot/2;i++)
if(v[i]!=v[tot-i+1])
return;
if(check())
ans=max(ans,tot);
return;
}
if((n-dep)+tot+1<ans)
return;
v[++tot]=b[dep];
dfs(dep+1);
tot--;
dfs(dep+1);
}
int main(){
freopen("lcps.in","r",stdin);
freopen("lcps.out","w",stdout);
scanf("%s",a+1);
scanf("%s",b+1);
if(strlen(a+1)<strlen(b+1))
swap(a,b);
m=strlen(a+1);
n=strlen(b+1);
dfs(1);
printf("%d",ans);
}