1039. 到底买不买
⼩红想买些珠⼦做⼀串⾃⼰喜欢的珠串。卖珠⼦的摊主有很多串五颜六⾊的珠串,但是不肯把任何⼀ 串拆散了卖。于是⼩红要你帮忙判断⼀下,某串珠⼦⾥是否包含了全部⾃⼰想要的珠⼦?如果是,那 么告诉她有多少多余的珠⼦;如果不是,那么告诉她缺了多少珠⼦。为⽅便起⻅,我们⽤[0-9]、[a-z]、[A-Z]范围内的字符来表示颜⾊.
输⼊格式:
每个输⼊包含1个测试⽤例。每个测试⽤例分别在2⾏中先后给出摊主的珠串和⼩红想做的珠串,两串 都不超过1000个珠⼦。
输出格式:
如果可以买,则在⼀⾏中输出“Yes”以及有多少多余的珠⼦;如果不可以买,则在⼀⾏中输出“No”以及 缺了多少珠⼦。其间以1个空格分隔。
输⼊样例1:
ppRYYGrrYBR2258
YrR8RrY
输出样例1:
Yes 8
输⼊样例2:
ppRYYGrrYB225
YrR8RrY
输出样例2:
No 2
分析:
用map来存各种珠子的个数,用s1,s2分别接收有的珠子和需要的珠子,遍历s2,如果mp存在,就让mp–,并且让计算多了多少的珠子–,如果mp不存在,flag=false,缺的珠子++。
#include<bits/stdc++.h>
using namespace std;
map<char,int>mp;
int main(){
string s1,s2; cin>>s1>>s2;
//cnt计算多了多少珠子,当mp中出现时,让cnt--
int cnt=s1.size();
//cnt1计算缺多少珠子,当mp不存在时,cnt++
int cnt1=0;
bool flag=true;
for(int i=0;i<s1.size();i++) mp[s1[i]]++;
for(int i=0;i<s2.size();i++){
if(mp[s2[i]]>=1) mp[s2[i]]--,cnt--;
else flag=false,cnt1++;
}
if(flag) cout<<"Yes "<<cnt;
else cout<<"No "<<cnt1;
return 0;
}