import java.util.*;
public class Solution {
/**
* return topK string
* @param strings string字符串一维数组 strings
* @param k int整型 the k
* @return string字符串二维数组
*/
// 1.使用map存放字符串出现的次数
// 2.使用优先级队列存放出现次数最多的k个字符串
// 2.1 常规的就是小顶堆,队列头部是最小的 offer和poll都是顶部元素
public String[][] topKstrings (String[] strings, int k) {
// write code here
HashMap<String,Integer> map = new HashMap<>();
for (String str : strings) {
map.put(str, map.getOrDefault(str, 0) + 1);
}
PriorityQueue<String> queue = new PriorityQueue<>(new Comparator<String>(){
@Override
public int compare(String o1,String o2){
if (map.get(o1).equals(map.get(o2))){
return o2.compareTo(o1);
}else {
return map.get(o1) - map.get(o2);
}
}
});
for (Map.Entry<String,Integer> entry : map.entrySet()) {
//
queue.offer(entry.getKey());
if (queue.size() > k){
queue.poll();
}
}
String[][] res = new String[k][2];
for (int i = 0; i < k; i++) {
String cur = queue.poll();
res[k-1-i] = new String[]{ cur,String.valueOf(map.get(cur)) } ;
}
return res;
}
}