傳送門
https://pintia.cn/problem-sets/994805260223102976/problems/994805283241443328
題目
小紅想買些珠子做一串自己喜歡的珠串妓忍。賣珠子的攤主有很多串五顏六色的珠串,但是不肯把任何一串拆散了賣仅颇。于是小紅要你幫忙判斷一下单默,某串珠子里是否包含了全部自己想要的珠子?如果是忘瓦,那么告訴她有多少多余的珠子搁廓;如果不是,那么告訴她缺了多少珠子耕皮。
為方便起見境蜕,我們用[0-9]、[a-z]凌停、[A-Z]范圍內(nèi)的字符來表示顏色粱年。例如在圖1中,第3串是小紅想做的珠串罚拟;那么第1串可以買台诗,因?yàn)榘巳克胍闹樽樱€多了8顆不需要的珠子赐俗;第2串不能買拉队,因?yàn)闆]有黑色珠子,并且少了一顆紅色的珠子阻逮。
輸入格式:
每個輸入包含1個測試用例粱快。每個測試用例分別在2行中先后給出攤主的珠串和小紅想做的珠串,兩串都不超過1000個珠子叔扼。
輸出格式:
如果可以買事哭,則在一行中輸出“Yes”以及有多少多余的珠子;如果不可以買瓜富,則在一行中輸出“No”以及缺了多少珠子鳍咱。其間以1個空格分隔。
輸入樣例1:ppRYYGrrYBR2258YrR8RrY
輸出樣例1:Yes 8
輸入樣例2:ppRYYGrrYB225YrR8RrY
輸出樣例2:No 2
分析
先新建珠串表与柑,用于統(tǒng)計(jì)同一字母出現(xiàn)的個數(shù)流炕,遍歷字符串1澎现,根據(jù)每個字符串的ASCII碼,將與ASCII碼對應(yīng)索引的珠串表的數(shù)值自增1每辟,然后按照字符串2剑辫,再將對應(yīng)索引的珠串表的數(shù)值自減2,如果等于0渠欺,則將缺少珠子的個數(shù)自增1妹蔽。
最后,根據(jù)缺少珠子的個數(shù)判斷是否缺珠子挠将,如果不缺珠子胳岂,輸出兩個字符串長度的差,即為多的珠子數(shù)舔稀;如果缺珠子乳丰,輸出缺少珠子的個數(shù)即可。
源代碼
//C/C++實(shí)現(xiàn)
#include <iostream>
#include <string>
using namespace std;
int beads[123]; //'z'的ASCII碼是122内贮,所以聲明123個空間
int main(){
string s1, s2;
cin >> s1 >> s2;
for(int i = 0; i < s1.size(); ++i){
++beads[s1[i]];
}
int lack = 0;
for(int i = 0; i < s2.size(); ++i){
if(beads[s2[i]] == 0){
++lack;
}
else{
--beads[s2[i]];
}
}
if(lack == 0){ //全部包含
printf("Yes %d\n", s1.size() - s2.size());
}
else{
printf("No %d\n", lack);
}
return 0;
}