描述
定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。
兄弟单词要求和原来的单词不同。例如: ab 和 ba 是兄弟单词。 ab 和 ab 则不是兄弟单词。
现在给定你 n 个单词,另外再给你一个单词 x ,让你寻找 x 的兄弟单词里,按字典序排列后的第 k 个单词是什么?
注意:字典中可能有重复单词。
数据范围:1≤�≤1000 1≤n≤1000 ,输入的字符串长度满足 1≤���(���)≤10 1≤len(str)≤10 , 1≤�<� 1≤k<n
输入描述:
输入只有一行。 先输入字典中单词的个数n,再输入n个单词作为字典单词。 然后输入一个单词x 最后后输入一个整数k
输出描述:
第一行输出查找到x的兄弟单词的个数m 第二行输出查找到的按照字典顺序排序后的第k个兄弟单词,没有符合第k个的话则不用输出。
示例1
输入:
3 abc bca cab abc 1
复制输出:
2 bca
复制
示例2
输入:
6 cab ad abcd cba abc bca abc 1
复制输出:
3 bca
复制说明:
abc的兄弟单词有cab cba bca,所以输出3 经字典序排列后,变为bca cab cba,所以第1个字典序兄弟单词为bca
我的代码
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static boolean checkStr(String chars, String xStr) {
Map<Character, Integer> map = new LinkedHashMap();
Map<Character, Integer> map2 = new LinkedHashMap();
for (int i = 0; i < chars.length(); i++) {
map.put(chars.charAt(i), map.getOrDefault(chars.charAt(i), 0) + 1);
}
for (int i = 0; i < xStr.length(); i++) {
map2.put(xStr.charAt(i), map2.getOrDefault(xStr.charAt(i), 0) + 1);
}
if (map.equals(map2)) {
return true;
}
return false;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String [] arr = new String[n];
for (int i = 0; i < n; i++) {
arr[i] = scanner.next();
}
String xStr = scanner.next();
int k = scanner.nextInt();
char[] chars = xStr.toCharArray();
int count = 0;
String result = null;
for (int i = 0; i < n; i++) {
if(arr[i].length() != xStr.length()){
continue;
}
if(arr[i].equals(xStr)){
continue;
}
if(!checkStr(arr[i],xStr) ){
continue;
}
count++;
if(count==k){
result = arr[i];
}
}
System.out.println(count);
if(result!= null) System.out.println(result);
}
}
参考别人的之后写的:
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static boolean isBroStr(String chars, String xStr){
if(chars.length() != xStr.length() || chars.equals(xStr)){
return false;
}
char[] chars1 = chars.toCharArray();
char[] chars2 = xStr.toCharArray();
Arrays.sort(chars1);
Arrays.sort(chars2);
if(String.valueOf(chars1).equals(String.valueOf(chars2))){
return true;
}
return false;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String [] arr = new String[n];
for (int i = 0; i < n; i++) {
arr[i] = scanner.next();
}
String xStr = scanner.next();
int k = scanner.nextInt();
List<String> list = new ArrayList<>();
for (int i = 0; i < arr.length ; i++) {
if(isBroStr(arr[i],xStr)){
list.add(arr[i]);
}
}
System.out.println(list.size());
if(list.size() >= k){
Collections.sort(list);
System.out.println(list.get(k-1));
}
}
知识点:
1.map之间也可以用equals比较
2. char []不能用equals比较
3.Arrays.的数组排序
4.Collections工具的排序
5.k值大于兄弟字符串个数的情况未考虑