我的:
这个用一个二维Dynamic programme,要注意很多细节,在代码里展示吧。
我的:
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<set>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<deque>
#include<list>
#include<cmath>
using namespace std;
const int maxn=5000+10;
typedef long long ll;
char a[maxn],b[maxn],c[maxn];
bool dp[maxn][maxn];
int main()
{
while(~scanf("%s%s%s",a+1,b+1,c+1))
{
int lena=strlen(a+1);
int lenb=strlen(b+1);
int lenc=strlen(c+1);
if(lena+lenb!=lenc)
{
cout<<"No"<<endl;
continue;
}
memset(dp,false,sizeof(dp));
dp[0][0]=true;
for(int i=0;i<=lena;i++)
{
for(int j=0;j<=lenb;j++)
{
if(i>0&&a[i]==c[i+j])
dp[i][j]=dp[i-1][j];
if(j>0&&b[j]==c[i+j])
dp[i][j]=dp[i][j-1];
}
}
// for(int i=0;i<=lena;i++)
// {
// for(int j=0;j<=lenb;j++)
// cout<<dp[i][j]<<" ";
// cout<<endl;
// }
if(dp[lena][lenb])
cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}