示例1
输入:
3 abc bca cab abc 1
输出:
2 bca
示例2
输入:
3 a aa aaa a 1
输出:
0
代码题解:
import java.util.*; // 导入Java的实用工具包,包括集合框架、输入输出等
public class Main {
public static void main(String[] args) {
// 创建Scanner对象用于读取标准输入
Scanner scanner = new Scanner(System.in);
// 循环读取输入直到没有更多数据
while (scanner.hasNext()) {
// 读取一行输入并按空格分割成字符串数组
String[] ss = scanner.nextLine().split(" ");
// 第一个元素转换为整数,表示后续单词的数量
Integer a = Integer.parseInt(ss[0]);
// 倒数第二个元素作为目标单词
String x = ss[ss.length - 2];
// 最后一个元素转换为整数,表示需要找到的第k个兄弟单词
Integer k = Integer.parseInt(ss[ss.length - 1]);
// 创建一个列表用于存储兄弟单词
List<String> list = new ArrayList<>();
// 遍历所有单词,检查是否为目标单词的兄弟单词
for (int i = 1; i <= a ; i++) {
if (isBrother(x, ss[i])) {
list.add(ss[i]); // 如果是兄弟单词,添加到列表中
}
}
// 获取兄弟单词的数量
int size = list.size();
// 输出兄弟单词的数量
System.out.println(size);
// 如果兄弟单词数量大于等于k,则进行排序并输出第k个兄弟单词
if (size >= k) {
Collections.sort(list); // 对兄弟单词列表进行字典序排序
System.out.println(list.get(k -
1)); // 输出第k个兄弟单词(注意索引从0开始)
}
}
}
/**
* 判断两个单词是否是兄弟单词
* @param x 第一个单词
* @param y 第二个单词
* @return 如果两个单词是兄弟单词返回true,否则返回false
*/
public static boolean isBrother(String x, String y) {
// 如果两个单词长度不同或相同,则不是兄弟单词
if (x.length() != y.length() || y.equals(x)) {
return false;
}
// 将两个单词转换为字符数组并排序
char[] s = x.toCharArray();
char[] j = y.toCharArray();
Arrays.sort(s);
Arrays.sort(j);
// 如果排序后的字符数组相等,则两个单词是兄弟单词
return new String(s).equals(new String(j));
}
}