思路:兄弟单词本质上就是单词字符的全排列(去除本身)。
字符集组成一样,并且字符串本身不相等,一定是兄弟单词。
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));
}
}
}
}

京公网安备 11010502036488号