E-字符统计重排(100p)

字符统计及重排

问题描述

给定一个只包含字母的字符串(不含空格),要求统计字符串中各个字母(区分大小写)出现的次数,并按照字母出现次数从大到小的顺序输出各个字母及其出现次数。

如果多个字母出现次数相同,则按照以下规则排序:

  1. 小写字母优先于大写字母
  2. 在全为小写或全为大写的情况下,按照字母的自然顺序(即ASCII码升序)排序

输入格式

输入为一行,包含一个仅由字母组成的字符串 (不含空格)。

输出格式

按照字母出现次数从大到小的顺序输出各个字母和字母次数,用英文分号分隔,注意末尾也需要加分号。每个字母及其出现次数的格式为"字母:次数",字母和次数间用英文冒号分隔。

样例输入1

xyxyXX

样例输出1

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

样例输入2

abababb

样例输出2

b:4;a:3;

样例解释

样例 解释说明
样例1 每个字符出现的次数都是2,按照规则,小写字母x排在小写字母y之前,而小写字母都排在大写字母X之前
样例2 b的出现次数(4次)比a多(3次),所以b排在a之前

数据范围

  • ,其中 表示字符串 的长度

题解

模拟+排序

  1. 统计字符出现次数: 首先,我们需要遍历整个字符串,统计每个字符出现的次数。这可以通过使用一个哈希表(在Python中可以用字典)来实现,键为字符,值为出现次数。

  2. 排序: 统计完成后,我们需要对这些字符按照出现次数和题目给定的规则进行排序。这里的关键是定义一个合适的排序规则。我们可以使用一个自定义的比较函数,该函数应考虑以下几点:

    • 首先比较字符出现的次数,次数多的排在前面
    • 如果次数相同,小写字母优先于大写字母
    • 如果是同为小写或同为大写的字母,则按照ASCII码升序排列
  3. 输出结果: 排序完成后,我们只需要按照要求的格式输出结果即可。

这道题的难点在于排序规则的实现。我们可以使用编程语言提供的排序函数,并自定义比较规则。例如,在Python中,我们可以使用sorted()函数的key参数来实现自定义排序。

参考代码

以下是五种语言的实现,每种实现都附带了详细的注释:

  • Python
from collections import Counter
import sys

def custom_sort(item):
    char, count = item
    # 返回一个元组作为排序的key
    # (-count, char.isupper(), ord(char)) 表示:
    # 1. 按照count的负值排序,这样count大的会排在前面
    # 2. 大写字母(isupper()为True)会排在后面
    # 3. 如果以上都相同,则按照字符的ASCII值排序
    return (-count, char.isupper(), ord(char))

def main():
    # 从标准输入读取字符串
    s = sys.stdin.readline().strip()
    
    # 使用Counter统计字符出现次数
    char_count = Counter(s)
    
    # 对字符进行自定义排序
    sorted_chars = sorted(char_count.items(), key=custom_sort)
    
    # 构建输出字符串
    output = ';'.join(f"{char}:{count}" for char, count in sorted_chars) + ';'
    
    # 输出结果
    print(output)

if __name__ == "__main__":
    main()
  • C
// 待补充
  • Javascript
// 自定义排序函数
function customSort(a, b) {
    if (a.count !== b.count) {
        return b.count - a.count; // 按出现次数降序排列
    }
    
    const isUpperA = a.char.toUpperCase() === a.char;
    const isUpperB = b.char.toUpperCase() === b.char;

    if (isUpperA !== isUpperB) {
        return isUpperA ? 1 : -1; // 小写字母排在前面
    }

    return a.char.localeCompare(b.char); // 按字符的 ASCII 值升序排列
}

// 主函数
function main() {
    const input = req

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

算法刷题笔记 文章被收录于专栏

本专栏收集并整理了一些刷题笔记

全部评论

相关推荐

Cookie是一种在客户端和服务器之间传递数据的机制。它是由服务器发送给客户端的小型文本文件,保存在客户端的浏览器中。每当浏览器向同一服务器发送请求时,它会自动将相关的Cookie信息包含在请求中,以便服务器可以使用这些信息来提供个性化的服务。要在HTTP请求中发送和接收Cookie,可以按照以下步骤操作:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=b48bebe08e474db8b80b853b12bafd48服务器发送Cookie:当服务器发送响应时,可以通过设置响应头中的Set-Cookie字段来发送Cookie。Set-Cookie字段的值是一个包含Cookie属性的字符串,例如:Set-Cookie: name=value; Expires=Wed, 21 Oct 2022 07:28:00 GMT; Path=/浏览器存储Cookie:一旦浏览器接收到带有Set-Cookie字段的响应,它会将Cookie保存在本地。每个Cookie都与特定的域名相关联,并且在指定的路径下有效。浏览器发送Cookie:当浏览器向服务器发送请求时,它会自动将与该域相关的所有Cookie包含在请求头的Cookie字段中,例如:Cookie: name=value; other_cookie=other_value服务器使用Cookie:服务器在接收到请求后可以通过读取请求头的Cookie字段来获取客户端发送的Cookie数据,并使用它们进行个性化处理或提供特定的功能。需要注意的是,Cookie具有一些属性,如过期时间(Expires或Max-Age),路径(Path)、域名(Domain)、安全属性(Secure)等,用于控制Cookie的行为和访问。此外,浏览器还可以为Cookie设置HttpOnly属性,使得Cookie值无法被JavaScript脚本访问,从而提高安全性。这就是在HTTP请求中发送和接收Cookie的基本原理。通过Cookie,服务器可以跟踪和存储用户的会话信息,以提供更个性化和有针对性的服务。
2024-11-09
在牛客打卡265天,今天也很努力鸭!
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务