PAT-B 1039. 到底買不買(20)

傳送門

https://pintia.cn/problem-sets/994805260223102976/problems/994805283241443328

題目

小紅想買些珠子做一串自己喜歡的珠串。賣珠子的攤主有很多串五顏六色的珠串,但是不肯把任何一串拆散了賣。于是小紅要你幫忙判斷一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告訴她有多少多余的珠子;如果不是,那么告訴她缺了多少珠子。
為方便起見,我們用[0-9]、[a-z]、[A-Z]范圍內的字符來表示顏色。例如在圖1中,第3串是小紅想做的珠串;那么第1串可以買,因為包含了全部她想要的珠子,還多了8顆不需要的珠子;第2串不能買,因為沒有黑色珠子,并且少了一顆紅色的珠子。


輸入格式:
每個輸入包含1個測試用例。每個測試用例分別在2行中先后給出攤主的珠串和小紅想做的珠串,兩串都不超過1000個珠子。
輸出格式:
如果可以買,則在一行中輸出“Yes”以及有多少多余的珠子;如果不可以買,則在一行中輸出“No”以及缺了多少珠子。其間以1個空格分隔。
輸入樣例1:ppRYYGrrYBR2258YrR8RrY
輸出樣例1:Yes 8
輸入樣例2:ppRYYGrrYB225YrR8RrY
輸出樣例2:No 2

分析

先新建珠串表,用于統計同一字母出現的個數,遍歷字符串1,根據每個字符串的ASCII碼,將與ASCII碼對應索引的珠串表的數值自增1,然后按照字符串2,再將對應索引的珠串表的數值自減2,如果等于0,則將缺少珠子的個數自增1。
最后,根據缺少珠子的個數判斷是否缺珠子,如果不缺珠子,輸出兩個字符串長度的差,即為多的珠子數;如果缺珠子,輸出缺少珠子的個數即可。

源代碼

//C/C++實現
#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;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容