介绍:给定一个字符串,请将字符串里的字符按照出现的频率降序排列。
示例1:

输入:
"tree"输出:
"eert"解释:
'e'出现两次,'r'和't'都只出现一次。
因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。

示例2:

输入:
"cccaaa"输出:
"cccaaa"解释:
'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。
注意"cacaca"是不正确的,因为相同的字母必须放在一起。

示例3:

输入:
"Aabb"输出:
"bbAa"解释:
此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确的。
注意'A'和'a'被认为是两种不同的字符。

实现思路:通过一个字典 dict 存储所有字符出现的次数,因为某个字符的出现次数不可能超过 s 的长度,所以我们将每个字符根据其出现次数放入数组中的对应位置,那么最后我们只要从后往前遍历数组所有位置,将不为空的位置的字符串加入结果 ret 中即可。

C++源代码:

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include <sstream>
#include<map>
#include<set>using namespace std;string frequencySort(string s)
{string res = "";unordered_map<char, int> myMap;vector<pair<char, int>> myVec;//统计所有的字母出现的频次for (int i = 0; i < s.size(); i++){myMap[s[i]]++;}//将字母及频次存入Vector,便于之后的排序for (auto it = myMap.begin(); it != myMap.end(); it++){myVec.push_back(make_pair(it->first, it->second));}//按照字母出现的频次从大到小进行排序sort(myVec.begin(), myVec.end(), [](const pair<char, int>& x, const pair<char, int>& y) -> int {return x.second > y.second; });//将排序后的字母,根据其频次,依次添加对应数量的该字母进入结果字符串中for (auto it = myVec.begin(); it != myVec.end(); it++){for (int i = 0; i < it->second; i++){res += it->first;}}return res;}int main()
{string s = "aaabbc";string result = frequencySort(s);cout <<result<< endl;system("pause");return 0;
}

LeetCode之根据字符出现频率排序相关推荐

  1. leetcode 451. 根据字符出现频率排序

    给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1:输入: "tree"输出: "eert"解释: 'e'出现两次,'r'和't'都只出现一次 ...

  2. LeetCode 451 根据字符出现频率排序

    题目描述 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 题解 桶排序 代码 class Solution { public:string frequencySort(string s) ...

  3. LeetCode 451. 根据字符出现频率排序(Sort Characters By Frequency)

    题目描述: 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入: "tree"输出: "eert"解释: 'e'出现两次,'r'和't ...

  4. Leetcode 451. 根据字符出现频率排序 解题思路及C++实现

    解题思路: 先使用unordered_map对字符串s中字符,进行频数统计: 再使用最大堆,对unorder_map进行排序: 接着将排序结果存在结果字符串res中. class Solution { ...

  5. LeetCode 451. 根据字符出现频率排序(map+优先队列)

    1. 题目 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 输入: "tree"输出: "eert" 2. 优先队列解题 先用map统计字符出现次数 ...

  6. LeetCode Algorithm 451. 根据字符出现频率排序

    451. 根据字符出现频率排序 Ideas Python解法:用个计数器,然后遍历计数器把相应字符乘以出现次数拼接起来就可以了. Code Python from collections import ...

  7. c++ list排序_LeetCode.451-根据字符出现频率排序

    根据字符出现频率排序 力扣​leetcode-cn.com 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 参考了评论区 Felix8bit 的答案 解题思路: 先根据每个词出现的概率进行 ...

  8. LeetCode中等题之根据字符出现频率排序

    题目 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入: "tree" 输出: "eert" 解释: 'e'出现两次,'r'和't' ...

  9. 根据字符出现频率排序

    给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入: "tree"输出: "eert"解释: 'e'出现两次,'r'和't'都只出现一 ...

  10. 451. 根据字符出现频率排序golang

    官解 func frequencySort(s string) string {charMap := make(map[rune]int)arr := make([]string, len(s))fo ...

最新文章

  1. AtCoder Regular Contest 071 D - 井井井 / ###
  2. selenium实例:unittest框架+PO开发模式
  3. 关于linux技术的的外文,关于Linux的介绍-外文翻译.doc
  4. Android 6.0 动态权限申请
  5. Android之BottomNavigationView实现底部按钮水纹波效果
  6. LeetCode 第 21 场双周赛(779/1913,前40.7%)
  7. UE3采用多进程编译Shader
  8. InstanceBeginEditable dw中特有标识
  9. 3个阶段 项目征名_中资企业新签的3个海外项目开工
  10. 虚拟服务器 vmotion,图文并茂:深入了解VMware vMotion过程
  11. CentOS 7.6 配置VNC远程访问服务器图形界面
  12. 盲盒商城app开发需要具备哪些核心功能,盲盒商城app源码成品分享
  13. 基于html制作一个介绍自己家乡的网站,排版整洁,内容丰富,主题鲜明
  14. MATLAB - 线型、Marker点等属性的设置
  15. Java输入/输出流(1)
  16. 如何批量压缩图片大小?教你3个批量压缩图片的方法
  17. 二维码的使用(java版)
  18. 划分,全概率公式,贝叶斯公式证明
  19. 基于android的汽车租赁系统app
  20. 牛客动态规划习题:Min酱要旅行(背包变种)

热门文章

  1. ASProtect注册码使用教程|ASProtect SKE(加壳脱壳工具) 2.56 汉化注册版
  2. 软件开发中的成本意识
  3. 微信小程序——flex弹性布局水平垂直居中
  4. 终结者:HTTPS在Tomcat中的使用(三)——Java代码生成密钥库文件及其对应的安全证书
  5. SQL SERVER数据库 查询sql 多表联查 top命令
  6. 记一次逆向拿到github token 然后dump掉别人所有库的
  7. boost noncopyable实现禁止类拷贝
  8. 3842开关电源完整原理图_开关电源的电路看不懂怎么办?看完本篇就简单了
  9. springboot2集成hbase2环境搭建
  10. 初见mybatis-plus(快速创建入门案例)