题目描述
给出一个名字,该名字有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;
}
}
}
京公网安备 11010502036488号