(牛客)到底买不买-Java

    技术2022-07-11  134

    题目来源

    到底买不买

    题目描述

    小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。

    为方便起见,我们用[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); } } }
    Processed: 0.009, SQL: 9