题意:给三个字符串a b c问c能否由a b构成。
思路:暴力,但是要注意,首先a b串中字母的个数得与c中字母的个数一样。一开始是这样做的先从c中把a挑出来再看剩下的是否和b匹配,这是错误的,如
a是 cdf
b是 abc
c是 abcdcf
显然可以,但是按照先把a挑出来会把c分成 abc dcf则不可以,所以这样是错的。
这样就不挑了,a b同时进行如果都有此字母,个数都加加,也就是谁先需要这个字母就给谁
#include<bits/stdc++.h>
using namespace std;
map<char,int>ma,mc;
int main()
{
int i,j,k;
string a,b,c;
while(cin>>a>>b>>c)
{
ma.clear();
mc.clear();
int lea=a.size();
int leb=b.size();
int lec=c.size();
for(i=0;i<lea;i++)
ma[a[i]]++;
for(i=0;i<leb;i++)
ma[b[i]]++;
int x=0;
int y=0;
for(i=0;i<lec;i++)
{
mc[c[i]]++;
if(x<lea&&c[i]==a[x])
x++;
if(y<leb&&c[i]==b[y])
y++;
}
int fl=1;
map<char,int>::iterator tt;
for(tt=mc.begin();tt!=mc.end();tt++)
{
if(mc[tt->first]!=ma[tt->first])
{
fl=0;
break;
}
}
if(fl)
{
if(x==lea&&y==leb)
printf("Yes\n");
else
printf("No\n");
}
else
printf("No\n");
}
}