题目描述
给出一个名字,该名字有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; } } }