题解 | 字符串出现次数的TopK问题
字符串出现次数的TopK问题
https://www.nowcoder.com/practice/fd711bdfa0e840b381d7e1b82183b3ee
package main
import (
"fmt"
"sort"
)
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* return topK string
* @param strings string字符串一维数组 strings
* @param k int整型 the k
* @return string字符串二维数组
*/
type pair struct {
str string
freq int
}
func topKstrings( strings []string , k int ) [][]string {
strFreq := make(map[string]int)
for _, str := range strings {
strFreq[str]++
}
pairs := make([]pair, len(strFreq))
for str, freq := range strFreq {
pairs = append(pairs, pair{str, freq})
}
sort.Slice(pairs, func(i, j int) bool {
if pairs[i].freq == pairs[j].freq {
return pairs[i].str < pairs[j].str
}
return pairs[i].freq > pairs[j].freq
})
res := make([][]string, k)
for i := 0; i < k; i++ {
res[i] = []string{pairs[i].str, fmt.Sprintf("%d", pairs[i].freq)}
}
return res
}
