当前位置: 首页 > 面试经验 >

2024华为OD机试真题 - 字符统计及重排 JAVA代码

优质
小牛编辑
68浏览
2024-08-14

2024华为OD机试真题 - 字符统计及重排 JAVA代码

2024华为OD机试真题,代码包含语言java 代码基本都有详细注释。

题目描述

给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数,

并按照字母出现次数从大到小的顺序。输出各个字母及其出现次数。

如果次数相同,按照自然顺序进行排序,且小写字母在大写字母之前。

输入描述

输入一行,为一个仅包含字母的字符串。

输出描述

按照字母出现次数从大到小的顺序输出各个字母和字母次数,用英文分号分隔,注意末尾的分号;

字母和次数间用英文冒号分隔。

用例

输入

xyxyXX

输出

x:2;y:2;X:2;

说明

每个字符出现的个数都是2,故x排在y之前,而小写字母x在X之前

输入

abababb

输出

b:4;a:3;

说明

b的出现个数比a多,故b排在a之前

声明

上述内容部分整理自考生的真实反馈以及网络资源的搜集,我们始终尊重原作者的权益。如若发现任何内容侵犯了您的版权,敬请及时与我们取得联系,我们将立即进行删除处理。

此外,本材料后续的解析与代码部分均为我方原创思考与分析,凝聚了我们的心血与智慧。我们恳请各位尊重原创,切勿随意搬运或抄袭,共同维护良好的学术与创作环境。谢谢!

订阅后可看完整内容,试看真题如下:

华为OD机试真题 - 剩余银饰的重量 (D卷,100分)

111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

题目解析

我们需要理解题目的要求。题目给定一个仅包含字母的字符串,要求我们统计字符串中各个字母(区分大小写)出现的次数,并按照字母出现次数从大到小的顺序进行排序。如果次数相同,则需要按照自然顺序进行排序,且小写字母应排在大写字母之前。

接下来,我们可以将解题过程分为几个步骤:

  1. 读取输入:首先,我们需要从输入中读取给定的字符串。在这个问题中,输入是一行仅包含字母的字符串。
  2. 统计字母次数:然后,我们需要遍历整个字符串,并使用一个数据结构(如字典或哈希表)来记录每个字母出现的次数。字典的键是字母,值是该字母出现的次数。
  3. 排序:在统计完所有字母的次数后,我们需要对字典进行排序。由于题目要求按照字母出现次数从大到小排序,并且次数相同时按照自然顺序排序(小写字母优先),我们可以使用Python中的sorted函数,并指定一个自定义的排序键。这个排序键首先根据字母出现的次数进行排序,如果次数相同,则根据字母的自然顺序(小写字母优先)进行排序。
  4. 输出结果:最后,我们需要按照题目要求的格式输出结果。具体来说,我们需要遍历排序后的字母列表,并打印出每个字母及其出现次数,字母和次数之间用英文冒号分隔,不同字母对之间用英文分号分隔,并且注意在最后一个字母对后面也要加上分号。

Java算法源码

import java.util.HashMap;
import java.util.Scanner;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        System.out.println(getResult(s));
    }

    public static String getResult(String s) {
        HashMap<Character, Integer> letter = new HashMap<>();

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            letter.put(c, letter.getOrDefault(c, 0) + 1);
        }

        return letter.entrySet().stream()
                .sorted((a, b) -> {
                    if (a.getValue() - b.getValue() != 0) {
                        return b.getValue() - a.getValue();
                    } else {
                        if (Character.isLowerCase(a.getKey()) && Character.isLowerCase(b.getKey())) {
                            return a.getKey() - b.getKey();
                        } else if (Character.isUpperCase(a.getKey()) && Character.isUpperCase(b.getKey())) {
                            return a.getKey() - b.getKey();
                        } else {
                            return Character.isUpperCase(a.getKey()) ? 1 : -1;
                        }
                    }
                })
                .map(entry -> entry.getKey() + ":" + entry.getValue() + ";")
                .collect(Collectors.joining());
    }
}

#华为od##华为od题库##华为OD##华为OD机试真题##华为#
 类似资料: