华为机试-027-中等-HJ27.查找兄弟单词
一、描述
定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。
兄弟单词要求和原来的单词不同。例如: ab 和 ba 是兄弟单词。 ab 和 ab 则不是兄弟单词。
现在给定你 n 个单词,另外再给你一个单词 x ,让你寻找 x 的兄弟单词里,按字典序排列后的第 k 个单词是什么?
注意:字典中可能有重复单词。
1.1、输入描述
- 输入只有一行。 先输入字典中单词的个数n,再输入n个单词作为字典单词。 然后输入一个单词x 最后后输入一个整数k
1.2、输出描述
- 第一行输出查找到x的兄弟单词的个数m 第二行输出查找到的按照字典顺序排序后的第k个兄弟单词,没有符合第k个的话则不用输出。
二、示例
2.1、示例1
输入:
3 abc bca cab abc 1
输出:
2
bca
说明:
abc的兄弟单词有cab cba bca,所以输出3
经字典序排列后,变为bca cab cba,所以第1个字典序兄弟单词为bca
三、答案(java)
3.1、方法一
package com.tzq.hwod;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
/**
* @authore:
* @data: 2021/10/13
* @Description:
*/
/**
* 功能描述: <br>
*
* @Param: 输入: 6 cab ad abcd cba abc bca abc 1 复制 输出: 3 bca 复制 说明: abc的兄弟单词有cab
* cba bca,所以输出3 经字典序排列后,变为bca cab cba,所以第1个字典序兄弟单词为bca
* @Return:
* @Author: guokun
* @Date: 2021/10/13 14:18
*/
public class Main {
public static void main(String[] args) {
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];
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);
if (size >= k) {
Collections.sort(list);
System.out.println(list.get(k - 1));
}
}
}
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));
}
}
四、答案(python 3)
4.1、方法一
#!/usr/bin/python
# -*- coding: UTF-8 -*-
while True:
try:
#读取输入数据,并且转换为列表
data1 = input().split()
#获取单词的个数
n1 = data1[0]
#按字典排序的第几个兄弟词
n2 = data1[-1]
#获取输入的n个单词
data2 = data1[1:-2]
#获取兄弟词
data3 = data1[-2]
#用于存储兄弟词的数量
n3 = 0
#用于存储兄弟词
data4 = []
for word in data2:
if word == data3:
continue
elif sorted(word) == sorted(data3):
n3 = n3 + 1
data4.append(word)
print(n3)
#将兄弟词按照字典排序
data5 = sorted(data4)
print(data5[int(n2)-1])
except:
break