【每日一题】【map、数组、二维数组排序、静态函数和库函数】2022年2月24日-NC97 字符串出现次数的TopK问题...

描述
给定一个字符串数组,再给定整数 k ,请返回出现次数前k名的字符串和对应的次数。
返回的答案应该按字符串出现频率由高到低排序。如果不同的字符串有相同出现频率,按字典序排序。
对于两个字符串,大小关系取决于两个字符串从左到右第一个不同字符的 ASCII 值的大小关系。
比如"ah1x"小于"ahb","231"<”32“
字符仅包含数字和字母

【每日一题】【map、数组、二维数组排序、静态函数和库函数】2022年2月24日-NC97 字符串出现次数的TopK问题..._第1张图片

 【每日一题】【map、数组、二维数组排序、静态函数和库函数】2022年2月24日-NC97 字符串出现次数的TopK问题..._第2张图片

答案:

public String[][] topKstrings (String[] strings, int k) {
    Map 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() {
        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);
}

你可能感兴趣的:(java,servlet,jvm,前端,开发语言)