go实现
- 统计每个字符串出现次数
- 排序
- 次数相同,按照词典排序
- 次数不同,按照次数排序排序
- 获取k个数据
- 进行数据组装
package main import ( "sort" "strconv" ) /** * return topK string * @param strings string字符串一维数组 strings * @param k int整型 the k * @return string字符串二维数组 */ type data struct { s string n int } func topKstrings( strings []string , k int ) [][]string { // write code here n := len(strings) if n == 0 || k > n{ return nil } set := make(map[string]data, 0) for _, x := range strings { var m data if _, ok := set[x]; ok { m = set[x] m.n++ }else{ m = data{s:x, n:1} } set[x] = m } tmp := make([]data, len(set)) inx := 0 for _, x := range set { tmp[inx] = x inx++ } sort.Slice(tmp, func(i, j int)bool{ // 次数相同,则按字典排序 if tmp[i].n == tmp[j].n { return tmp[i].s < tmp[j].s }else { // 不同则按 次数排序 return tmp[i].n > tmp[j].n } }) var res [][]string for _, x := range tmp[:k] { res = append(res, []string{x.s, strconv.Itoa(x.n)}) } return res }