现在的位置: 首页 > 综合 > 正文

字符串完美度

2013年12月13日 ⁄ 综合 ⁄ 共 579字 ⁄ 字号 评论关闭

題目詳情

 

我們要給每個字母配一個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;
}

 

抱歉!评论已关闭.