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; } }