题意::给三个字符串,保证第三个串长度是前两个串长度之和,确定前两个串保持原有的字母顺序能不能拼成第三个串
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int flag;
int len1,len2,len,vis[300][600];
char str1[300],str2[300],str[600];
void dfs(int a,int b,int c)
{
if(a==len1&&b==len2&&c==len)
{
flag=1;
return ;
}
if(str[c]!=str1[a]&&str[c]!=str2[b])
return ;
if(a>len1||b>len2||c>len)
return ;
if(vis[b][c])
return ;
vis[b][c]=1;
if(flag)
return ;
if(str[c]==str1[a])
dfs(a+1,b,c+1);
if(str[c]==str2[b])
dfs(a,b+1,c+1);
}
int main()
{
int N,cot=1;
scanf("%d",&N);
while(N--)
{
scanf("%s%s%s",str1,str2,str);
memset(vis,0,sizeof(vis));
len1=strlen(str1);
len2=strlen(str2);
len=strlen(str);
flag=0;
dfs(0,0,0);
if(flag)
printf("Data set %d: yes\n",cot++);
else
printf("Data set %d: no\n",cot++);
}
}