我正在寻找一个按频率排序字符的问题的解决方案。我得到了一些解决方案,但无法理解其中一行代码。
程序的完整代码如下:
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是什么?