题解 | #名字的漂亮度#
名字的漂亮度
https://www.nowcoder.com/practice/02cb8d3597cf416d9f6ae1b9ddc4fde3
首先定义一个map用来统计每个字母出现的次数,然后使用vector对每个字母以出现次数从大到小排序,最后将次数乘以由26开始依次减小的数字,计算出它们的和即为名字最大可能的漂亮度。
#include <iostream>
#include <map>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
map<char, int> letters;
string s;
vector<int> times;
for (int i = 0; i < n; i++) {
cin >> s;
for (char letter : s) {
if (letters.find(letter) == letters.end()) {
letters.insert({letter, 1});
} else {
letters[letter]++;
}
}
int sum = 0;
for (pair<char, int> letter : letters) {
times.push_back(letter.second);
}
sort(times.begin(), times.end(), greater());
int count = 0;
int number = 26;
while (count < times.size()) {
sum += number * times[count++];
number--;
}
cout << sum << endl;
times.clear();
letters.clear();
}
return 0;
}
// 64 位输出请用 printf("%lld")
中等(算法题解) 文章被收录于专栏
中等难度题目

