题解 | #查找兄弟单词#
查找兄弟单词
https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
import java.util.Scanner;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
//字典单词个数
int n = in.nextInt();
//去重
List<String> dicList=new ArrayList<>();
for(int i=0;i<n;i++){
String dic=in.next();
dicList.add(dic);
}
//单词X
String x = in.next();
//k
int k=in.nextInt();
//寻找兄弟单词:与X不等,但字符都相同
List<String> list=new ArrayList<>();
for(String bro:dicList){
if(!bro.equals(x)){
//字典单词中的每个字符出现的次数
Map<Character,Integer> map=new HashMap<>();
for(int i=0;i<bro.length();i++){
char ch=bro.charAt(i);
Integer count=map.get(ch);
if(count==null){
map.put(ch,1);
}else{
map.put(ch,count+1);
}
}
//单词X对比
int flag=0;
for(int i=0;i<x.length();i++){
char ch=x.charAt(i);
Integer count=map.get(ch);
if(count!=null&&count>0){
map.put(ch,count-1);
}else{
flag++;
break;
}
}
if(flag==0){
//判断是否为兄弟单词
int flag2=0;
Set<Character> checkSet=map.keySet();
for(Character key:checkSet){
if(map.get(key)!=0){
flag2++;
break;
}
}
if(flag2==0){
list.add(bro);
}
}
}
}
//兄弟单词排序
//System.out.println(list);
Collections.sort(list);
System.out.println(list.size());
if(k<list.size()){
System.out.println(list.get(k-1));
}
}
}
}
通过率咋这么低,,,这题也不难啊,逻辑很清晰。

