【牛客網OJ題】到底買不買

問題描述:

小紅想買些珠子做一串自己喜歡的珠串。賣珠子的攤主有很多串五顏六色的珠串,但是不肯把任何一串拆散了賣。於是小紅要你幫忙判斷一下,某串珠子裏是否包含了全部自己想要的珠子?如果是,那麼告訴她有多少多餘的珠子;如果不是,那麼告訴她缺了多少珠子。


爲方便起見,我們用[0-9]、[a-z]、[A-Z]範圍內的字符來表示顏色。例如,YrR8RrY是小紅想做的珠串;那麼ppRYYGrrYBR2258可以買,因爲包含了全部她想要的珠子,還多了8顆不需要的珠子;

ppRYYGrrYB225不能買,因爲沒有黑色珠子,並且少了一顆紅色的珠子。

 

輸入描述:

每個輸入包含1個測試用例。每個測試用例分別在2行中先後給出攤主的珠串和小紅想做的珠串,兩串都不超過1000個珠子。

輸出描述:

如果可以買,則在一行中輸出“Yes”以及有多少多餘的珠子;如果不可以買,則在一行中輸出“No”以及缺了多少珠子。其間以1個空格分隔。

示例1

輸入

ppRYYGrrYBR2258
YrR8RrY

輸出

Yes 8

分析:

將輸入的賣珠子的攤主的一串珠子數全部放入map集合中(key爲珠子字符,value爲該珠子的數量)。再遍歷小紅想要的珠子串,如果map中有他想要的珠子,就把該珠子數量減一;反之,就用count變量記錄下他缺少的珠子數。在輸出時只需要判斷count的值是否爲0,count爲0也就意味着 賣珠子的攤主的這串珠子能夠滿足小紅的需要,多餘的個數爲:賣珠子的攤主的這串珠子數 減去 小紅需要的珠子數。如果count不爲0,那麼就不能滿足小紅的需要,缺少的個數就是 count的個數。

public class Main{ 
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        while (in.hasNext()) {
            String s = in.nextLine();
            String res = in.nextLine();
            Map<Character,Integer> map = new HashMap<>();
            for(int i = 0;i<s.length();i++){
                int length = map.getOrDefault(s.charAt(i),0);
                map.put(s.charAt(i),length+1);
            }

            int count = 0;

            for(int j = 0;j< res.length();j++){
                int len = map.getOrDefault(res.charAt(j),0);
                if(len <= 0){
                    count ++;
                }
                map.put(res.charAt(j),len-1);
            }
            if(count == 0){
                System.out.println("Yes" +" " + (s.length()-res.length()));
            }else{
                System.out.println("No"+" " + count);
            }
        }
        in.close();
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章