题解 | #查找兄弟单词#
查找兄弟单词
https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
import java.util.*;
import java.util.stream.Collectors;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
String[] arr = str.split(" ");
int length = arr.length;
int num = Integer.valueOf(arr[0]);
List<String> strList = new ArrayList<>();
for (int i = 0; i < num; i++) {
strList.add(arr[i + 1]);
}
String parentStr = arr[length - 2];
int k = Integer.valueOf(arr[length - 1]);
// 先找到兄弟单词
strList = strList.stream().filter(val -> !val.equals(parentStr)).collect(
Collectors.toList());
List<String> list1 = new ArrayList<>();
for (String sVal : strList) {
boolean flag = true;
// 判断是否都出现过,不能用ASCII码
if (!checkStr(sVal, parentStr)) {
flag = false;
}
// 代表是
if (flag) {
list1.add(sVal);
}
}
// 排序
Collections.sort(list1);
System.out.println(list1.size());
// 通过k找到第几个
if ((list1 != null && list1.size() > 0) && list1.size() >= k - 1) {
System.out.println(list1.get(k - 1));
}
}
private static boolean checkStr(String str1, String str2) {
List<Character> list1 = new ArrayList<>();
char[] chars1 = str1.toCharArray();
for (int i = 0; i < chars1.length; i++) {
list1.add(chars1[i]);
}
List<Character> list2 = new ArrayList<>();
char[] chars2 = str2.toCharArray();
for (int i = 0; i < chars2.length; i++) {
list2.add(chars2[i]);
}
// 排序
list1.sort(new Comparator<Character>() {
@Override
public int compare(Character o1, Character o2) {
return o1 - o2;
}
});
// 排序
list2.sort(new Comparator<Character>() {
@Override
public int compare(Character o1, Character o2) {
return o1 - o2;
}
});
// 比较是否一致
String s1 = list1.toString();
String s2 = list2.toString();
if (s1.equals(s2)) {
return true;
}
return false;
}
}
这道题的话,其实有点绕,但总体来说还好。
1.需要封装数据
2.找到兄弟单词,过滤满足要求的兄弟单词(判断两个单词是否一致,比如abc-acb)
3.得到结果之后排序
4.输出
查看17道真题和解析