题解 | #名字的漂亮度#

名字的漂亮度

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")

中等(算法题解) 文章被收录于专栏

中等难度题目

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务