(牛客)到底買不買-Java

題目來源

到底買不買

題目描述

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

爲方便起見,我們用[0-9]、[a-z]、[A-Z]範圍內的字符來表示顏色。例如,YrR8RrY是小紅想做的珠串;那麼ppRYYGrrYBR2258可以買,因爲包含了全部她想要的珠子,還多了8顆不需要的珠子;ppRYYGrrYB225不能買,因爲沒有黑色珠子,並且少了一顆紅色的珠子。
在這裏插入圖片描述

題目解析

分別使用map存放珠子
統計商人手上的珠子不同顏色的數量(HashMap)
統計用戶手上的珠子不同顏色的數量(HashMap)
以用戶爲參考目標,判斷商人是否存在用戶要求的顏色和數量,進行統計差值和是否滿足條件

題目解答

import java.util.Scanner;
import java.util.Map;
import java.util.Map.Entry;
import java.util.HashMap;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String have=sc.nextLine();
        String need=sc.nextLine();
        Map<Character,Integer> h=new HashMap<>();
        for(char c:have.toCharArray()){
            if(h.containsKey(c)){
                h.put(c,h.get(c)+1);
            }else{
                h.put(c,1);
            }
        }
        Map<Character,Integer> n=new HashMap<>();
        for(char c:need.toCharArray()){
            if(n.containsKey(c)){
                n.put(c,n.get(c)+1);
            }else{
                n.put(c,1);
            }
        }
        boolean wealthy=true;
        int lack=0;
        for(Entry<Character,Integer> en:n.entrySet()){
            char k=en.getKey();
            int v=en.getValue();
            if(h.containsKey(k)&&h.get(k)<v){
                wealthy=false;
                lack+=v-h.get(k);
            }else if(!h.containsKey(k)){
                wealthy=false;
                lack+=v;
            }
        }
        if(wealthy){
            System.out.println("Yes "+(have.length()-need.length()));
        }else{
            System.out.println("No "+lack);
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章