题解 | #查找兄弟单词#

查找兄弟单词

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.输出

#华为OD#
全部评论

相关推荐

11-26 22:34
已编辑
重庆邮电大学 Java
快手 客户端开发 (n+5)k*16 公积金12
牛客895077908号:佬 什么双非硕啊
点赞 评论 收藏
分享
M_bao:换个排版吧哥们,看着费劲
点赞 评论 收藏
分享
10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务