【每日一题】【map、数组、二维数组排序、静态函数和库函数】2022年2月24日-NC97 字符串出现次数的TopK问题
描述
给定一个字符串数组,再给定整数 k ,请返回出现次数前k名的字符串和对应的次数。
返回的答案应该按字符串出现频率由高到低排序。如果不同的字符串有相同出现频率,按字典序排序。
对于两个字符串,大小关系取决于两个字符串从左到右第一个不同字符的 ASCII 值的大小关系。
比如"ah1x"小于"ahb","231"<”32“
字符仅包含数字和字母
答案:
public String[][] topKstrings (String[] strings, int k) { Map<String, Integer> map = new HashMap<>(); for (int i = 0; i < strings.length; i++) { if (!map.keySet().contains(strings[i])) { map.put(strings[i], 1); } else { int v = map.get(strings[i]); map.put(strings[i], v + 1); } } String[][] strDim = new String[map.size()][2]; int index = 0; for (String key : map.keySet()) { strDim[index++] = new String[]{key, String.valueOf(map.get(key))}; } Arrays.sort(strDim, new Comparator<String[]>() { public int compare(String[] s1, String[] s2) { if (!s1[1].equals(s2[1])) { return Integer.parseInt(s2[1]) - Integer.parseInt(s1[1]); } else { return s1[0].compareTo(s2[0]); } } }); return Arrays.copyOfRange(strDim, 0, k); }
本文来自博客园,作者:哥们要飞,转载请注明原文链接:https://www.cnblogs.com/liujinhui/p/15930292.html