华为OD机试题【字符统计】【2023 B卷 100分】

这篇具有很好参考价值的文章主要介绍了华为OD机试题【字符统计】【2023 B卷 100分】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

华为OD机试题【字符统计】【2023 B卷 100分】


🎯 前言

🏆 《华为机试真题》专栏含2023年牛客网面经、华为面经试题、华为OD机试真题最新试题。

🏆 华为机试有三道题,第一道和第二道属于简单题,分值为100分,第三道为困难题,分值为200分,总分400分,150分钟考试时间。

🏆 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议!

🎯 题目描述

输入一个只包含小写英文字母和数字的字符串,按照不同字符统计 数由多到少输出统计结果,如果统计的个数相同,则按照ASCI码由小到大排序输出。

数据范围:字符串长度满足 1<=len(str)<=1000。

输入描述:
一个只包含小写英文字母和数字的字符串。

输出描述:
一个字符串,为不同字母出现次数的降序表示。
若出现次数相同,则按ASCII码的升序输出。

🎯 解题思路

题目要求按照不同字符统计次数,并按照次数从多到少输出,如果次数相同,则按照字符ASCII码从小到大输出。可以参考以下步骤实现:

  1. 首先,统计每个字符出现的次数,可以使用一个字典来存储,key为字符,value为出现的次数;
  2. 然后,按照出现次数从多到少排序,可以使用一个列表来存储结果,每个元素是一个元组,第一个元素是字符,第二个元素是出现的次数;
  3. 如果出现次数相同,按照字符ASCII码从小到大排序。需要定义一个比较器函数(可以使用lambda表达式),按照题目要求排序;
  4. 最后,遍历排序后的列表,按照题目要求输出结果。

📙 Python代码实现

s = input().strip()# 统计字符出现次数
cnt = {}
for c in s:
    cnt[c] = cnt.get(c, 0) + 1

# 按照出现次数和字符ASCII码排序
result = sorted(cnt.items(), key = lambda x: (-x[1], ord(x[0])))

# 输出结果
for c, t in result:
    print(c, t)

📗 Java代码实现

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine().trim();
        // 统计字符出现次数
        Map cnt = new HashMap < > ();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            cnt.put(c, cnt.getOrDefault(c, 0) + 1);
        }

        // 按照出现次数和字符ASCII码排序
        List > list = new ArrayList < > (cnt.entrySet());
        Collections.sort(list, new Comparator > () {@
            Override
            public int compare(Map.Entry o1, Map.Entry o2) {
                if (o1.getValue() != o2.getValue()) {
                    return o2.getValue() - o1.getValue();
                } else {
                    return o1.getKey() - o2.getKey();
                }
            }
        });

        // 输出结果
        for (Map.Entry entry: list) {
            System.out.println(entry.getKey() + " " + entry.getValue());
        }
    }
}

📘 C语言代码实现

#include
#include
#include

#define MAXN 1000

int cmp(const void * a,
    const void * b) {
    char x = * ((char * ) a), y = * ((char * ) b);
    if (cnt[x] != cnt[y]) {
        return cnt[y] - cnt[x];
    } else {
        return x - y;
    }
}

int main() {
    char s[MAXN + 1];
    fgets(s, MAXN + 1, stdin);
    int n = strlen(s) - 1;
    // 统计字符出现次数
    memset(cnt, 0, sizeof(cnt));
    for (int i = 0; i < n; i++) {
        char c = s[i];
        cnt[c] ++;
    }

    // 按照出现次数和字符ASCII码排序
    char chars[MAXN];
    for (int i = 0; i < n; i++) {
        chars[i] = s[i];
    }
    qsort(chars, n, sizeof(char), cmp);

    // 输出结果
    for (int i = 0; i < n; i++) {
        if (i > 0 && cnt[chars[i]] == cnt[chars[i - 1]]) {
            continue;
        }
        printf("%c %d\n", chars[i], cnt[chars[i]]);
    }

    return 0;
}

华为OD机试题【字符统计】【2023 B卷 100分】

📭 本专栏包含了最新最全的2023年 华为OD机试真题,有详细的分析和解答。文章来源地址https://www.toymoban.com/news/detail-472771.html

到了这里,关于华为OD机试题【字符统计】【2023 B卷 100分】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包