题解 | #字符串出现次数的TopK问题#
字符串出现次数的TopK问题
https://www.nowcoder.com/practice/fd711bdfa0e840b381d7e1b82183b3ee
package com.hhdd.哈希; import java.util.*; /** * @Author huanghedidi * @Date 2022/8/23 23:07 */ public class 字符串出现次数的TopK问题 { public static void main(String[] args) { String[][] res = topKstrings(new String[]{"abcd", "abcd", "abcd", "pwb2","abcd","pwb2","p12"}, 3); System.out.println(Arrays.toString(res)); } /** * return topK string * * @param strings string字符串一维数组 strings * @param k int整型 the k * @return string字符串二维数组 */ public static String[][] topKstrings(String[] strings, int k) { // write code here HashMap<String, Integer> map = new HashMap<>(); for (int i = 0; i < strings.length; i++) { String tmp = strings[i]; if (map.containsKey(tmp)) { map.put(tmp, map.get(tmp) + 1); } else { map.put(tmp, 1); } } ArrayList<Item> help = new ArrayList<>(); for (Map.Entry<String, Integer> item : map.entrySet()) { Item tmp = new Item(); tmp.times = item.getValue(); tmp.str = item.getKey(); help.add(tmp); } List<String[]> res = new ArrayList<>(); PriorityQueue<Item> priorityQueue = new PriorityQueue<>(help); for (int i = 0; i < k; i++) { Item item = priorityQueue.poll(); res.add(new String[]{item.str, item.times + ""}); } String[][] ans = new String[res.size()][2]; for (int i = 0; i < res.size(); i++) { ans[i] = res.get(i); } return ans; } static class Item implements Comparable<Item> { public String str; public int times; @Override public int compareTo(Item o) { if (this.times == o.times) { return str.compareTo(o.str); } return o.times - times; } } }