链接:https://www.nowcoder.com/questionTerminal/bb4f1a23dbb84fd7b77be1fbe9eaaf32
来源:牛客网
nowcoder有两盒(A、B)乒乓球,有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所有的种类,并且每种球的数量不少于B盒中的数量,该怎么办呢?
输入描述:
输入有多组数据。
每组数据包含两个字符串A、B,代表A盒与B盒中的乒乓球,每个乒乓球用一个大写字母表示,即相同类型的乒乓球为相同的大写字母。
字符串长度不大于10000。
输出描述:
每一组输入对应一行输出:如果B盒中所有球的类型在A中都有,并且每种球的数量都不大于A,则输出“Yes”;否则输出“No”。
示例1
输入
ABCDFYE CDE<br/>ABCDGEAS CDECDE
输出
Yes<br/>No
解题思路:
1.创建一个只含有大写字母的字符串A~Z对应的位置为0~25
2.创建两个大小为26的整形数组用于统计两个字符串中对应字母的个数
3.分别遍历两个字符串,统计数组中对应位置的大写字母个数
4.比较两个数组的每一个对应位置的元素大小若第一个数组当前元素值小于第二个数组当前元素值则表示不符合题意返回false并打印No,反之则打印Yes
实现代码如下:
package TE0610;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String table="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
while (scanner.hasNext()){
String str=scanner.nextLine();
String[] t=str.split(" ");
String a=t[0];
String b=t[1];
int[] A=new int[26];
int[] B=new int[26];
for (int i=0;i<a.length();i++){
if (a.charAt(i)>='A'&&a.charAt(i)<='Z') {
int now = table.indexOf(a.charAt(i));
A[now]++;
}
}
for (int i=0;i<b.length();i++){
if (b.charAt(i)>='A'&&b.charAt(i)<='Z') {
int now=table.indexOf(b.charAt(i));
B[now]++;
}
}
if (isYes(A,B)){
System.out.println("Yes");
}else {
System.out.println("No");
}
}
}
public static boolean isYes(int[] A,int[] B){
for (int i=0;i<26;i++){
if (A[i]<B[i]){
return false;
}
}
return true;
}
}