1.第一题
1.1题目
描述:
nowcoder有两盒(A、B)乒乓球,有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所有的种类,并且每种球的数量不少于B盒中的数量,该怎么办呢?
输入描述:
输入有多组数据。
每组数据包含两个字符串A、B,代表A盒与B盒中的乒乓球,每个乒乓球用一个大写字母表示,即相同类型的乒乓球为相同的大写字母。
字符串长度不大于10000
输出描述:
每一组输入对应一行输出:如果B盒中所有球的类型在A中都有,并且每种球的数量都不大于A,则输出“Yes”;否则输出“No”
1.2思路
- 分别统计AB中各个字符出现的次数,保存在hashmap中
- 遍历B查看各个字符出现的次数有没有超过A
1.3解题
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String A = sc.next();
String B = sc.next();
char[] chA = A.toCharArray();
char[] chB = B.toCharArray();
HashMap<Character, Integer> mapA = new HashMap<>();
HashMap<Character, Integer> mapB = new HashMap<>();
// 统计A中各个字符出现的次数,保存在hashmap中
for (char ch : chA) {
if (!mapA.containsKey(ch)) {
mapA.put(ch, 1);
} else {
mapA.put(ch, mapA.get(ch) + 1);
}
}
// 统计B中各个字符出现的次数,保存在hashmap中
for (char ch : chB) {
if (!mapB.containsKey(ch)) {
mapB.put(ch, 1);
} else {
mapB.put(ch, mapB.get(ch) + 1);
}
}
boolean flg = true;
// 遍历B查看各个字符出现的次数有没有超过A
for (char ch : chB) {
if (!mapA.containsKey(ch) || mapA.get(ch) < mapB.get(ch)) {
flg = false;
break;
}
}
if (flg) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
}
2.第二题
2.1题目
描述:
定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。
兄弟单词要求和原来的单词不同。例如: ab 和 ba 是兄弟单词。 ab 和 ab 则不是兄弟单词。
现在给定你 n 个单词,另外再给你一个单词 x ,让你寻找 x 的兄弟单词里,按字典序排列后的第 k 个单词是什么?
注意:字典中可能有重复单词
输入描述:
输入只有一行。
先输入字典中单词的个数n,再输入n个单词作为字典单词。
然后输入一个单词x
最后后输入一个整数k
2.2思路
- 将每个单词进行排序后判断是不是兄弟单词
- 将单词排序后统计兄弟单词出现的次数并记录下第k个出现的单词
2.3解题
import java.util.*;
public class Main {
// 判断两个单词是不是兄弟单词
public static boolean isBrother(String str1,String str2){
// 兄弟单词要求和原来的单词不同
if(str1.equals(str2)){
return false;
}
char[] ch1 = str1.toCharArray();
char[] ch2 = str2.toCharArray();
Arrays.sort(ch1);
Arrays.sort(ch2);
str1 = new String(ch1);
str2 = new String(ch2);
return str1.equals(str2);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] str = new String[n];
for(int i = 0;i < n;i++){
str[i] = sc.next();
}
// 要求的第K个单词是排序后的单词
Arrays.sort(str);
String x = sc.next();
int k = sc.nextInt();
int count = 0;
// 保存第k个单词
String ret = "";
for(int i = 0;i < n;i++){
// 统计兄弟单词出现的次数
if(isBrother(str[i],x)){
count++;
if(count == k){
ret = str[i];
}
}
}
System.out.println(count);
System.out.println(ret);
}
}