NC97 字符串出现次数的TopK问题

描述

给定一个字符串数组,再给定整数k,请返回出现次数前k名的字符串和对应的次数。

返回的答案应该按字符串出现频率由高到低排序。如果不同的字符串有相同出现频率,按字典序排序。

对于两个字符串,大小关系取决于两个字符串从左到右第一个不同字符的 ASCII 值的大小关系。

比如"ah1x"小于"ahb","231"<”32“

字符仅包含数字和字母

[要求]

如果字符串数组长度为N,时间复杂度请达到O(N \log K)O(NlogK)

示例1

输入:

["a","b","c","b"],2

复制返回值:

[["b","2"],["a","1"]]

复制说明:

"b"出现了2次,记["b","2"],"a"与"c"各出现1次,但是a字典序在c前面,记["a","1"],最后返回[["b","2"],["a","1"]]
 

示例2

输入:

["123","123","231","32"],2

复制返回值:

[["123","2"],["231","1"]]

复制说明:

 "123"出现了2次,记["123","2"],"231"与"32"各出现1次,但是"231"字典序在"32"前面,记["231","1"],最后返回[["123","2"],["231","1"]] 

示例3

输入:

["abcd","abcd","abcd","pwb2","abcd","pwb2","p12"],3

复制返回值:

[["abcd","4"],["pwb2","2"],["p12","1"]]

复制

备注:

1 \leq N \leq 10^51≤N≤105
#
# return topK string
# @param strings string字符串一维数组 strings
# @param k int整型 the k
# @return string字符串二维数组
#

from collections import Counter
class Solution:
    def topKstrings(self , strings , k ):
        # write code here
        dic = Counter(strings)
        res = sorted(dic.items(), key=lambda x:(-x[1], x[0]))
        res = res[:k]
        return res

学习sorted函数和collections模块

sorted:Timesort方法。时间复杂度:O(n) ~ O(nlogn)。空间复杂度O(n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值