题目
给定一个字符串,请将字符串里的字符按照出现的频率降序排列。
思路
一开始,误以为只有字母,结果wa了。后来想了一下,改用hashmap来统计字符的个数,再将map中的键值对遍历到优先队列中,利用优先队列构造字符串直到队列为空!
代码
import java.util.Comparator;
import java.util.HashMap;
import java.util.PriorityQueue;
import java.util.Queue;
class Element
{
char temp;
int num;
public Element(char temp,int num)
{
this.temp=temp;
this.num=num;
}
}
class Solution {
public String frequencySort(String s) {
int length=s.length();
HashMap<Character,Integer> map=new HashMap<>();
char temp;
// 统计字符数目
for (int i = 0; i < length; ++i)
{
temp=s.charAt(i);
if (map.containsKey(temp))
{
map.put(temp,map.get(temp)+1);
}
else
map.put(temp,1);
}
Comparator<Element>comparator=new Comparator<Element>() {
@Override
public int compare(Element o1, Element o2) {
return o2.num- o1.num;
}
};
Queue<Element>queue=new PriorityQueue<>(comparator);
map.forEach((k,v)->{
queue.add(new Element(k,v));
});
StringBuilder ans=new StringBuilder();
while (!queue.isEmpty())
{
Element a=queue.poll();
while (a.num!=0)
{
ans.append(a.temp);
--a.num;
}
}
return ans.toString();
}
}
结果
没什么技术含量,就是利用了一些容器的特性而已!