import java.util.*;
public class Solution {
/**
* return topK string
* @param strings string字符串一维数组 strings
* @param k int整型 the k
* @return string字符串二维数组
*/
public String[][] topKstrings (String[] strings, int k) {
//统计每个字符串出现的次数,并对字符串排序
TreeMap<String , Integer> map = new TreeMap<>() ;
for(String str : strings) {
Integer count = map.get(str) ;
if(count == null) {
map.put(str , 1) ;
} else {
map.put(str , count + 1) ;
}
}
//对字符串次数排序,次数相同的的字符串依次放入链表
TreeMap<Integer , ArrayList<String>> mapCount = new TreeMap<>((n1 , n2)->n2-n1) ;
for(String key : map.keySet()) {
int count = map.get(key) ;
ArrayList<String> list = mapCount.get(count) ;
if(list == null) {
list = new ArrayList<String>() ;
list.add(key) ;
mapCount.put(count , list) ;
} else {
list.add(key) ;
}
}
//确定string[][]的真实长度,取 K 和 strings中不重复字符串次数 的最小值
int realK = k < map.size() ? k : map.size() ;
String[][] res = new String[realK][2] ;
int index = 0 ;
//遍历mapCount,填充string[][]
for(Integer cnt : mapCount.keySet()) {
List<String> list = mapCount.get(cnt) ;
for(int i = 0 ; i < list.size() && index < realK; i ++) {
res[index][0] = list.get(i) ;
res[index ++][1] = String.valueOf(cnt) ;
}
if(index == realK) break ;
}
return res ;
}
}