完美字符串
字符串的完美度等于它里面所有字母的完美度之和。每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数。字母不分大小写,也就是说字母F和f的完美度相同。 给定一个字符串,输出它的最大可能的完美度。例如:dad,你可以将26分配给d,25分配给a,这样整个字符串完美度为77。题目参考:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1182
分析: (1)由于每个字母的完美度可以自由分配,那么要得到最大的完美度,显然字符串中数量越多的字母分配的完美度分值就应该越大。 (2)只需要统计出字符串包含的各个字母的数量,按照从大到小排序,再依次将完美度值从大到小进行赋值,最后得到的必然是最大完美度。 看代码:s = input().lower()
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))])) 1)先将输入字符串s统一转换成小写; 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()函数进行完美度求和并输出。
测试用例:EYBQTBTKQJ 输出结果:236
分析: (1)由于每个字母的完美度可以自由分配,那么要得到最大的完美度,显然字符串中数量越多的字母分配的完美度分值就应该越大。 (2)只需要统计出字符串包含的各个字母的数量,按照从大到小排序,再依次将完美度值从大到小进行赋值,最后得到的必然是最大完美度。 看代码:s = input().lower()
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))])) 1)先将输入字符串s统一转换成小写; 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()函数进行完美度求和并输出。
测试用例:EYBQTBTKQJ 输出结果:236
总结
- 上一篇: Python的zip
- 下一篇: 你应该知道的print