go实现

  1. 统计每个字符串出现次数
  2. 排序
    • 次数相同,按照词典排序
    • 次数不同,按照次数排序排序
  3. 获取k个数据
  4. 进行数据组装
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
}