思路:兄弟单词本质上就是单词字符的全排列(去除本身)。
字符集组成一样,并且字符串本身不相等,一定是兄弟单词。
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Scanner; /** * 查找兄弟单词 * 输出描述:输出查找到x的兄弟单词的个数m * 然后输出查找到的按照字典顺序排序后的第k个兄弟单词, * 没有符合第k个的话则不用输出。 * 保留可能重复的兄弟单词。 * */ public class XiongDiDanCi { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt();//输入单词的个数 String[] words = new String[num]; for (int i = 0; i < num; i++){ words[i] = sc.next(); } String target = sc.next();//目标单词(查找此单词的兄弟单词) char[] tarChars = target.toCharArray(); Arrays.sort(tarChars);//进行排序,方便后面使用 int k = sc.nextInt(); // 排序后的第k个兄弟单词 sc.close(); if (target.length() > 1) { //此时才有兄弟单词 ArrayList<String> list = new ArrayList<>(); for (String word : words) {//判断与目标单词是不是兄弟单词 //长度相等,并且与目标单词不等(才有可能是兄弟单词) if (word.length() == target.length() && !word.equals(target)) { char[] chars = word.toCharArray(); //若char数组中的字符与目标单词中的一样,那就是兄弟单词,否则不是 Arrays.sort(chars); if (Arrays.equals(tarChars, chars)) {//若相等则为兄弟单词 list.add(word); } } } Collections.sort(list); System.out.println(list.size()); if (list.size() >= k) {//有第K个就输出,没有第k个,就不输出 System.out.println(list.get(k-1)); } } } }