思路大概是: 兄弟单词不能等于原单词,兄弟单词中每个字母个数要与原单词相同,即a的个数比较,b的个数比较,c的个数比较... 由题意,兄弟单词满足的条件: 1. 与原单词不能一模一样 2. 单词长度需与原单词相等(字母总个数相同) 3. 所含每个字母个数相等 根据上述条件得到: 将原单词按字典排序(即aaabbbccc),只需要遍历每个单词s[i],将s[i]按字典排序,得到s2(如aaabcccdd),比较s1、s2是否相等即可。 import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int num = sc.nextInt(); //单词个数 num String[] s = new String[num]; //保存输入的单词 s[num] for(int i=0;i<num;i++){ s[i] = sc.next(); } String str = sc.next(); //需要查找的单词 str int k = sc.nextInt(); //要输出第k个兄弟单词 k int count =0; //兄弟单词个数计数 count char[] chars1 = str.toCharArray(); Arrays.sort(chars1); //原单词转字符数组、快排 chars1 String s1 = String.valueOf(chars1); //排序后转字符串,用于比较 s1 ArrayList<String> strings = new ArrayList<>(); //用来保存兄弟词 //比较过程,只需要遍历s 找长度与str相等的单词s[i] 注:s[i]不能与str相等 for(int i=0;i<num;i++){ if (s[i].equals(str)||s[i].length()!=str.length()){ continue; } char[] chars2 = s[i].toCharArray(); Arrays.sort(chars2); //str2转数组排序为 chars2 String s2 = String.valueOf(chars2); //chars2转字符串为 s2 if (s1.equals(s2)){ //此时只需要比较s1、s2是否相等 count++; strings.add(s[i]); //计数并加入到ArrayList中得 strings } } //调用集合对strings 中所有字符串按字典排序并输出 Collections.sort(strings); System.out.println(count); for (int i=0;i<strings.size();i++){ if (i+1==k){ System.out.println(strings.get(i)); break; } } } }