字符串的完美度等于它里面所有字母的完美度之和。每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数。
字母不分大小写,也就是说字母F和f的完美度相同。
给定一个字符串,输出它的最大可能的完美度。例如:dad,你可以将26分配给d,25分配给a,这样整个字符串完美度为77。
分析:
(1)由于每个字母的完美度可以自由分配,那么要得到最大的完美度,显然字符串中数量越多的字母分配的完美度分值就应该越大。
(2)只需要统计出字符串包含的各个字母的数量,按照从大到小排序,再依次将完美度值从大到小进行赋值,最后得到的必然是最大完美度。
看代码:
s = input().lower()1)先将输入字符串s统一转换成小写;
cs = 'abcdefghijklmnopqrstuvwxyz'
cd = sorted([[c, s.count(c)] for c in cs], key=lambda x: x[1], reverse=True)
print(sum([x[1] * v for x, v in zip(cd, range(26, 0, -1))]))
2)构建26个字母构成的序列cs;
3)通过列表推导式
[[c, s.count(c)] for c in cs]
构建一个字母和该字母在s中数量对应关系的列表,然后通过sorted内置排序函数通过各字母数量进行降序排序;
4)通过列表推导式和zip结合
[x[1] * v for x, v in zip(cd, range(26, 0, -1))]
,将字母,字母在s中数量,相应的完美度值进行匹配组合,构成一个完美度值的新序列,然后用sum()函数进行完美度求和并输出。
,将字母,字母在s中数量,相应的完美度值进行匹配组合,构成一个完美度值的新序列,然后用sum()函数进行完美度求和并输出。
测试用例:
EYBQTBTKQJ
输出结果:236
本文介绍了一种算法,用于计算字符串的最大可能完美度。通过统计字符出现次数并按降序分配完美度值,最终求和得到最大完美度。

1326

被折叠的 条评论
为什么被折叠?



