public String[][] topKStrings (String[] strings, int k){
Map<String, Integer> map = new HashMap<>();
for (String str :
strings) {
map.put(str, map.getOrDefault(str, 0) + 1);
// 将字符串以及出现的次数利用map记录下来,
}
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
List<Map.Entry<String, Integer>> list = new ArrayList<>(entrySet);
// 对map中的entry 进行排序。
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
if (o1.getValue().intValue() == o2.getValue().intValue()){
// 如果出现次数相同, 则根据字符的ascii码排序
return o1.getKey().compareTo(o2.getKey());
}else {
// 如果出现次数不同, 则根据出现次数排序。
return o2.getValue().compareTo(o1.getValue());
}
}
});
String[][] ans = new String[k][2];
// 取出前k个字符串
for (int i = 0; i < k; i++) {
ans[i][0] = list.get(i).getKey();
ans[i][1] = list.get(i).getValue().toString();
}
return ans;
}