451. Sort Characters By Frequency

来源:互联网 发布:大话数据库 pdf 编辑:程序博客网 时间:2024/06/15 14:57

Given a string, sort it in decreasing order based on the frequency of characters. 【原题描述】

例子1:

Input:"tree"Output:"eert"Explanation:'e' appears twice while 'r' and 't' both appear once.So 'e' must appear before both 'r' and 't'. Therefore "eetr" is also a valid answer.

例子2:

Input:"cccaaa"Output:"cccaaa"Explanation:Both 'c' and 'a' appear three times, so "aaaccc" is also a valid answer.Note that "cacaca" is incorrect, as the same characters must be together.

解题代码

#include <iostream>#include <string>#include <unordered_map>#include <algorithm>using namespace std;string frequencySort(string s) {    unordered_map<char, int> freq;    vector<string> bucket(s.size() + 1, "");    string res;    for (char c : s) freq[c]++;    // 保存在桶内,n表示char的频率    for (auto& it : freq) {        int n = it.second;        char c = it.first;        bucket[n].append(n, c);    }    // 频率由高到低,降序排列    for (int i = s.size(); i>0; i--) {        if (!bucket[i].empty())            res.append(bucket[i]);    }    return res;}

查找表问题,其排序主要体现在后面几句。

原创粉丝点击