列表

详情


NC219235. alan的字符串

描述

小y有两个字符串 
 和  分别为  和  的长度
小y想选一个  和  的公共子序列,然后她希望这个子序列是回文的
并且希望这个公共子序列尽可能长
可是小y不会,于是就请教了alan
alan瞬间就秒掉了,你知道alan是怎么做的吗?orz

输入描述

第一行包含一个字符串,表示字符串  。 第二行包含一个字符串,表示字符串  。

输出描述

一行,包含一个整数,表示满足条件  和  的最长子序列的长度

示例1

输入:

aaaaa
bbbbb

输出:

0

示例2

输入:

aaaaa
abbbb

输出:

1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++11) 解法, 执行用时: 136ms, 内存消耗: 504K, 提交时间: 2021-05-10 19:43:51

# include<iostream>
# include<cstring>
using namespace std;
const int N=1e5;
const int M=50;
int n,m;
char s1[N],s2[M],cpy[M];
int len=0;
int maxlen=0;
void dfs(int cnt)
{
	if(cnt>m)
	{
		for(int i=1;i<=len/2;i++)	
			if(cpy[i]!=cpy[len-i+1]) return ;
		int num=1;
		for(int i=1;i<=n;i++)
		{
			if(cpy[num]==s1[i])
			{
				num++;
			}
			if(num>len) break;
		}
		if(num<=len) return ;
		maxlen=max(maxlen,len);
		return ;
		 
	}
	cpy[++len]=s2[cnt];
	dfs(cnt+1);
	len--;
	dfs(cnt+1);
}
int main()
{
	cin>>(s1+1);
	cin>>(s2+1);
	n=strlen(s1+1);
	m=strlen(s2+1);
	dfs(1);
	cout<<maxlen<<endl;
	return 0;
 } 

上一题