只需要统计单词里各个字母出现的次数,次数都一样即为兄弟单词。
import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int count = in.nextInt(); String[] ss = new String[count]; for (int i = 0; i < count; i++) { ss[i] = in.next(); } String s = in.next(); int k = in.nextInt(); Map<Character, Integer> sp = new HashMap<>(); for (int i = 0; i < s.length(); i++) { if (sp.containsKey(s.charAt(i))) { sp.put(s.charAt(i), sp.get(s.charAt(i)) + 1); } else { sp.put(s.charAt(i), 1); } } ArrayList<String> list = new ArrayList<>(); for (int j = 0; j < count; j++) { String b = ss[j]; if(b.length() != s.length()) continue; Map<Character, Integer> bp = new HashMap<>(); boolean same = true; for (int i = 0; i < b.length(); i++) { if(s.charAt(i) != b.charAt(i)){ same = false; } if (bp.containsKey(b.charAt(i))) { bp.put(b.charAt(i), bp.get(b.charAt(i)) + 1); } else { bp.put(b.charAt(i), 1); } } if(same) continue; boolean bro = true; for(char key : bp.keySet()){ if(bp.get(key) != sp.get(key)){ bro = false; break; } } if(bro){ list.add(b); } } list.sort((o1,o2)->o1.compareTo(o2)); System.out.println(list.size()); if(k>0 && k<=list.size()){ System.out.println(list.get(k-1)); } } }