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
}
京公网安备 11010502036488号