import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//1.先输入字典中单词的个数n
Integer n = sc.nextInt();
//2.再输入n个单词作为字典单词
List<String> LC = new ArrayList<>();
for(int i = 0; i < n ; i++){
LC.add(sc.next());
}
//3.然后输入一个单词x
String strX = sc.next();
//4.最后后输入一个整数k
Integer numK = sc.nextInt();
//1.第一行输出查找到x的兄弟单词的个数m
Integer countM = 0;
List<String> SiblingWords = new ArrayList<>();
for(String s : LC){
if(IsSiblingWords(s,strX)){
SiblingWords.add(s);
countM++;
}
}
System.out.println(countM);
//第二行输出查找到的按照字典顺序排序后的第k个兄弟单词,没有符合第k个的话则不用输出。
Collections.sort(SiblingWords);
if(SiblingWords.size()>=numK){
System.out.println(SiblingWords.get(numK-1));
}
}
//定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。兄弟单词要求和原来的单词不同。例如: ab 和 ba 是兄弟单词。 ab 和 ab 则不是兄弟单词。
private static boolean IsSiblingWords(String s, String strX) {
if(s.length()!=strX.length() || s.equals(strX)){
return false;
}
char[] s_chars = s.toCharArray();
char[] strX_chars = strX.toCharArray();
Arrays.sort(s_chars);
Arrays.sort(strX_chars);
return (new String(s_chars).equals(new String(strX_chars)));
}
}
注意:
1.{ Collections.sort(SiblingWords); }
2.{
char[] s_chars = s.toCharArray();
char[] strX_chars = strX.toCharArray();
Arrays.sort(s_chars);
Arrays.sort(strX_chars);
return (new String(s_chars).equals(new String(strX_chars)));
}

京公网安备 11010502036488号