Appearance
名字的漂亮度
本节目标:理解“名字的漂亮度”的核心思路,并能把它用于实际开发或面试表达。
说明:原 OneNote 中有图片引用,但图片未包含在导出目录中;本页保留了可用的文字与代码内容。
中等 通过率:45.31% 时间限制:1秒 空间限制:32M
知识点==字符串====贪心==校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。 描述 给出一个字符串,该字符串仅由小写字母组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。 每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个不同字母拥有相同的“漂亮度”。字母忽略大小写。 给出多个字符串,计算每个字符串最大可能的“漂亮度”。
本题含有多组数据。数据范围:输入的名字长度满足 1≤n≤10000 输入描述: 第一行一个整数N,接下来N行每行一个字符串 输出描述: 每个字符串可能的最大漂亮程度 示例****1 输入: 2zhangsanlisi ==复制== 输出: 192101 ==复制== 说明: 对于样例lisi,让i的漂亮度为26,l的漂亮度为25,s的漂亮度为24,lisi的漂亮度为25+26+24+26=101.
读取字符串的个数
N = int(input())
对于每一个字符串进行处理
for _ in range(N):
读取字符串
line = input()
创建一个字典来计算每个字母的出现次数
freq = {}
遍历字符串中的每个字母
for char in line:
如果字母在字典中,增加其计数,否则添加到字典
freq[char] = freq.get(char, 0) + 1
获取所有的出现次数并按照次数降序排序
counts = sorted(freq.values(), reverse=True)
初始化漂亮度为0
beauty = 0
漂亮度从26开始递减分配
score = 26
对每个有出现次数的字母分配漂亮度
for count in counts:
累加当前字母的漂亮度到总漂亮度
beauty += count * score
下一个字母的漂亮度减1
score -= 1
打印每个字符串的最大可能漂亮度
print(beauty)
