题目来源
到底买不买
题目描述
小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。
为方便起见,我们用[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
);
}
}
}