【发布时间】:2019-07-25 14:10:02
【问题描述】:
我正在寻找按频率对字符进行排序的问题的解决方案。我得到了一些解决方案,但无法完成一行。
程序的完整代码为:
class Solution {
public String frequencySort(String s) {
HashMap<Character, Integer> map = new HashMap<>();
for(char c: s.toCharArray()){
map.put(c, map.getOrDefault(c, 0) + 1);
}
PriorityQueue<Character> maxHeap = new PriorityQueue<>((a,b) -> map.get(b)-map.get(a));
maxHeap.addAll(map.keySet());
StringBuilder result = new StringBuilder();
while(!maxHeap.isEmpty()){
char current = maxHeap.remove();
for(int i =0; i<map.get(current); i++){
result.append(current);
}
}
return result.toString();
}
}
我对这段代码有疑问:
PriorityQueue<Character> maxHeap = new PriorityQueue<>((a,b) -> map.get(b)-map.get(a));
我完全不明白这条线是什么意思。因此,您创建了一个优先级队列,那么为什么我们要从 map.get(b) 中减去 map.get(a)。 a和b是什么?
【问题讨论】:
-
它向构造函数传递了一个 lambda 以充当比较器。
标签: java algorithm sorting data-structures priority-queue