华为OD机试真题 Java 实现【字符串重新排序】【2023Q1 100分】-LMLPHP

一、题目描述

给定一个字串s,s包含以空格分隔的若干个单词,请对s进行如下处理后输出:

1、单词内部调整

对每个单词字母重新按字典序排序。

2、单词间顺序调整:

  1. 统计每个单词出现的次数,并按次数降序排列;
  2. 次数相同时,按单词长度升序排列;
  3. 次数和单词长度均相同时,按字典序升序排列。

请输出处理后的字符串,每个单词以一个空格分隔。

二、输入描述

行宁符串,每个宁符取值范围: [a-zA-Z0-9]以及空格,宁符串长度范围: [1,1000]。

三、输出描述

重新排序后的宁符串,每个单词间隔1个空格,且首属无空格。

四、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String line = sc.nextLine();
    String[] arr = line.split(" ");

    Map<String, Integer> map = new HashMap<String, Integer>();
    for (String str : arr) {
        char[] chars = str.toCharArray();
        Arrays.sort(chars);
        String key = String.valueOf(chars);
        int val = map.getOrDefault(key, 0);
        map.put(key, val + 1);
    }

    Set<Map.Entry<String, Integer>> entries = map.entrySet();
    List<Map.Entry<String, Integer>> list = new ArrayList<>(entries);
    list.sort( (a, b) -> {
        String key1 = a.getKey();
        String key2 = b.getKey();
        Integer val1 = a.getValue();
        Integer val2 = b.getValue();
        if (val1 != val2) {
            //如果次数不一样,按次数降序排序
            return val2 - val1;
        }else {
            if (key1.length() != key2.length()) {
                //次数相同时,按单词长度升序排列;
                return key1.length() - key2.length();
            }else {
                //次数和单词长度均相同时,按字典序升序排列。
                return key1.compareTo(key2);
            }
        }
    });

    StringBuilder builder = new StringBuilder();
    for (Map.Entry<String, Integer> entry : list) {
        String key = entry.getKey();
        //出现的次数
        Integer n = entry.getValue();
        //这里要注意,出现多少次,就得打印多少个,因为key只保存一个
        for (int i = 0; i < n; i++) {
            builder.append(key).append(" ");
        }
    }
    builder.deleteCharAt(builder.length() - 1);
    System.out.println(builder);
}

五、效果展示

1、输入

nezha study java

2、输出

aajv aehnz dstuy

华为OD机试真题 Java 实现【字符串重新排序】【2023Q1 100分】-LMLPHP


🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

华为OD机试真题 Java 实现【字符串重新排序】【2023Q1 100分】-LMLPHP

05-12 11:54