题解 | #查找兄弟单词#
查找兄弟单词
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.输出