Codeforces Round #101 (Div. 2), problem: (A) Amusing Joke
题目大意
给你三个字符串,这里我起名为a,b,c 然后我们需要统计a和b中所有字符出现的次数 是否和c中所有字符出现的次数相同
题解
我们可以先将a和b字符串拼接为一个大的字符串ss,然后求出ss字符串的长度与c字符串的长度进行比较 首先,如果长度不相同的话,就没有必要继续判断下去了 直接输出NO
其次,我们对ss和c字符串进行排序 然后我们可以用一个C++ 内置函数 strstr() 这个函数功能挺强的 在区域赛上一个题也是通过这个函数解的话很方便,它能判断一个串是否是另一个串的子串,然后子串是包括本身的
#include<bits/stdc++.h>
using namespace std;
const int maxn=100+10;
char ss[maxn],s1[maxn],s[maxn];
int main(){
cin>>ss>>s1>>s;
strcat(ss,s1);
int n=strlen(ss);
int m=strlen(s);
sort(ss,ss+n);
sort(s,s+m);
if(n!=m) cout<<"NO"<<endl;
else{
if(strstr(s,ss))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
最后注意,字符个数相同,排序之后不是只用判断两个串是否相等就可以了吗?直接ss==c就输出YES,否则输出NO
是不对的,对于字符数组的话,我们是不能直接判断相等,而是需要逐个比较,然而strstr正好有这个功能
不过对于string来说,简直是太简单了,因为确实是可以直接判断相等的!
而且拼接也很容易
具体代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
string ss,s1,s;
cin>>ss>>s1>>s;
ss=ss+s1;
sort(ss.begin(),ss.end());
sort(s.begin(),s.end());
if(ss==s)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
return 0;
}
学如逆水行舟,不进则退