题解 | #查找兄弟单词#
查找兄弟单词
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)); } } } }
通过率咋这么低,,,这题也不难啊,逻辑很清晰。