題目詳情
我們要給每個字母配一個1-26之間的整數,具體怎麼分配由你決定,但不同字母的完美度不同,
而一個字符串的完美度等於它裏面所有字母的完美度之和,且不在乎字母大小寫,也就是說字母F和f的完美度是一樣的。
現在給定一個字符串,輸出它的最大可能的完美度。
例如:dad,你可以將26分配給d,25分配給a,這樣整個字符串最大可能的完美度爲77。
思路非常直觀:個數越多的字母應分得的完美度越大。
用一個哈希表來存儲各個字母的個數即可。再按個數排序,計算整個字符串的完美度。
函數如下:
inline bool isuppercase(char s) { return (s >= 'A' && s <= 'Z'); } int perfect(const string &s) { vector<int> power(26,0); for(unsigned int i = 0; i < s.length(); i++) { if(isuppercase(s[i])) { power[s[i] - 'A']++; } else { power[s[i] - 'a']++; } } sort(power.begin(), power.end()); int perfect = 0; for(int i = 25, k = 26; i >= 0; i--) { if(power[i] == 0) { break; } perfect += power[i] * k--; } return perfect; }