题目描述

给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。
给出多个名字,计算每个名字最大可能的“漂亮度”。

题目没看懂,看了下讨论里@谢小橙
图片说明
本来想用哈希表存储字母和相应次数,为了按次数从大到小排列,再把次数放进vector里;
但是一想既然只用知道字母出现次数的排序,干脆用一个数组就可以,26个坑分别存放a-z的次数
然后从大到小排序,然后累加。

static bool cmp( int a, int b){
    return a>b?true:false;
}
int main(){
    int a;
    string s;
    while(cin>>a){
        while(a--){
            cin>>s;
            vector<int> v(26);
            for(auto i:s)
                v[i-'a']++;
            sort(v.begin(),v.end(),cmp);
            int k=26,ans=0;
            for(auto i:v){
                if(!i) break;
                ans+=(k--)*i;
            }
            cout<<ans<<endl;
        }
    }
}