完美字符串
??? ? ?字符串的完美度等于它里面所有字母的完美度之和。每個字母的完美度可以由你來分配,不同字母的完美度不同,分別對應一個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