Given a string, sort it in decreasing order based on the frequency of characters.

Example 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.

Example 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.

Example 3:

Input:
"Aabb" Output:
"bbAa" Explanation:
"bbaA" is also a valid answer, but "Aabb" is incorrect.
Note that 'A' and 'a' are treated as two different characters.

给一个字符串按照字符出现的频率来排序。

Java:

public class Solution {
public String frequencySort(String s) {
HashMap<Character, Integer> charFreqMap = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
charFreqMap.put(c, charFreqMap.getOrDefault(c, 0) + 1);
}
ArrayList<Map.Entry<Character, Integer>> list = new ArrayList<>(charFreqMap.entrySet());
list.sort(new Comparator<Map.Entry<Character, Integer>>(){
public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
StringBuffer sb = new StringBuffer();
for (Map.Entry<Character, Integer> e : list) {
for (int i = 0; i < e.getValue(); i++) {
sb.append(e.getKey());
}
}
return sb.toString();
}
} 

Python:

class Solution(object):
def frequencySort(self, s):
"""
:type s: str
:rtype: str
"""
return ''.join(c * t for c, t in collections.Counter(s).most_common()) 

Python:

class Solution(object):
def frequencySort(self, s):
"""
:type s: str
:rtype: str
"""
freq = collections.defaultdict(int)
for c in s:
freq[c] += 1 counts = [""] * (len(s)+1)
for c in freq:
counts[freq[c]] += c result = ""
for count in reversed(xrange(len(counts)-1)):
for c in counts[count]:
result += c * count return result

C++:

class Solution {
public:
string frequencySort(string s) {
unordered_map<char, int> freq;
for (const auto& c : s) {
++freq[c];
} vector<string> counts(s.size() + 1);
for (const auto& kvp : freq) {
counts[kvp.second].push_back(kvp.first);
} string result;
for (int count = counts.size() - 1; count >= 0; --count) {
for (const auto& c : counts[count]) {
result += string(count, c);
}
} return result;
}
};

  

  

All LeetCode Questions List 题目汇总

最新文章

  1. CSS-position详解
  2. 网络爬虫3-使用LIB_http库
  3. FASTREPORT 整理 (mtm)
  4. ERROR 1010 (HY000): Error dropping database (can&#39;t rmdir &#39;.\qpweb&#39;, errno: 41) 删库失败问题的解决
  5. 一步步学敏捷开发:4、Scrum的3种角色
  6. Java设计模式之——单例模式
  7. Linux FTP安装与简单配置
  8. 基于visual Studio2013解决C语言竞赛题之0202坐标转换
  9. Hessian 使用例子
  10. BZOJ4383 Pustynia(线段树+拓扑排序)
  11. Linux 环境变量问题
  12. NFS相关、NFS服务端安装配置、exportfs命令、nfs客户端的问题
  13. mac里安装Mycrypt扩展
  14. 临时表 on commit delete rows 与 on commit preserve rows 的区别
  15. 从Tomcat无法正常关闭讲讲Java线程关闭问题【转载】
  16. 7. Debug on local machine
  17. IntelliJ IDEA配置maven3.3.3+mybatis3.1.1
  18. Java并发编程原理与实战二十一:线程通信wait&amp;notify&amp;join
  19. mysql数据库,什么是数据库的全备份?
  20. Opencv读取图片像素值

热门文章

  1. 正则爬取京东商品信息并打包成.exe可执行程序。
  2. Hibernate中Java对象的生命周期
  3. JDK1.8 java.io.Serializable接口详解
  4. Linux——查询服务器公网IP
  5. Collections.synchronizedList与CopyOnWriteArrayList比较
  6. 使用Ajax实现三级联动
  7. LOJ P10004 智力大冲浪 题解
  8. BZOJ 4103: [Thu Summer Camp 2015]异或运算 可持久化trie
  9. 关于System.Reflection.TargetInvocationException 异常
  10. Centos 不重启 修改ulimit参数