一、题目链接
乒乓球筐
二、题目描述
给定两个乒乓球筐,每个乒乓球的种类用不同的大写字母表示。请问第一个乒乓球筐内是否完全包含第二个乒乓球筐内所有乒乓球的种类和数量?
输入描述
输入两行,每行输入一个仅包含大写字母的字符书代表乒乓球筐内的乒乓球。两个字符串的长度均不超过200000
输出描述
如果第一个乓乓球筐包含第二个的所有种类和数量,则输出"Yes”。否则输出"No"
三、答案解析
算法思路
简单查询题⽬,可以⽤哈希表帮助我们解决。
编写代码
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
while(in.hasNext()) // 未知组数的输⼊
{
char[] s1 = in.next().toCharArray();
char[] s2 = in.next().toCharArray();
int[] hash = new int[26];
for(int i = 0; i < s1.length; i++)
{
hash[s1[i] - 'A']++;
}
boolean ret = true;
for(int i = 0; i < s2.length; i++)
{
if(--hash[s2[i] - 'A'] < 0)
{
ret = false;
break;
}
}
System.out.println(ret ? "Yes" : "No");
}
}
}
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s1 = in.next();
String s2 = in.next();
HashMap<Character, Integer> hashMap = new HashMap<>();
int count = 0;
for (int i = 0; i < s1.length(); i++) {
hashMap.put(s1.charAt(i), hashMap.getOrDefault(s1.charAt(i), 0) + 1);
}
for (int i = 0; i < s2.length(); i++) {
if (!hashMap.containsKey(s2.charAt(i))) {
System.out.println("No");
count++;
break;
} else {
hashMap.put(s2.charAt(i), hashMap.get(s2.charAt(i)) - 1);
if (hashMap.get(s2.charAt(i)) < 0) {
System.out.println("No");
count++;
break;
}
}
}
if (count == 0) {
System.out.println("Yes");
}
}
}