给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。
给出多个名字,计算每个名字最大可能的“漂亮度”。
整数N,后续N个名字
N个字符串,每个表示一个名字
输出:
每个名称可能的最大漂亮程度
样例输入: 2
zhangsan
lisi
样例输出: 192
101
/*
名字的漂亮度
给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。
给出多个名字,计算每个名字最大可能的“漂亮度”。
整数N,后续N个名字
N个字符串,每个表示一个名字
输出:
每个名称可能的最大漂亮程度
样例输入: 2
zhangsan
lisi
样例输出: 192
101
*/
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
int main(void)
{
int nameSum;
string name;
vector<int> score;
vector<int> sum_vec;
map<char,int> char_map;
int sum = 0;
cin>>nameSum;
while(nameSum--)
{
sum = 0;
cin>>name;
for(unsigned int i = 0;i<name.size();++i)
{
if(char_map.count(name[i]) == 0)
char_map.insert(make_pair<char,int>(name[i],1));
else
char_map.find(name[i])->second += 1;
}
for(map<char,int>::iterator it = char_map.begin();it != char_map.end();++it)
{
score.push_back(it->second);
}
sort(score.begin(),score.end());
int tmp = 26;
for(vector<int>::reverse_iterator it = score.rbegin();it != score.rend();++it)
{
sum += *it * (tmp--);
}
sum_vec.push_back(sum);
char_map.clear();
score.clear();
}
for(vector<int>::iterator it = sum_vec.begin();it != sum_vec.end();++it)
cout<<*it<<endl;
return 0;
}