思路:兄弟单词本质上就是单词字符的全排列(去除本身)。
字符集组成一样,并且字符串本身不相等,一定是兄弟单词。

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));
            }
        }
    }
}