题目
描述
给定一个字符串数组,再给定整数 k ,请返回出现次数前k名的字符串和对应的次数。
返回的答案应该按字符串出现频率由高到低排序。如果不同的字符串有相同出现频率,按字典序排序。
对于两个字符串,大小关系取决于两个字符串从左到右第一个不同字符的 ASCII 值的大小关系。
比如"ah1x"小于"ahb",“231”<”32“
字符仅包含数字和字母
数据范围:字符串数满足 0≤n≤100000,每个字符串长度 0≤n≤10,0≤k≤2500要求:空间复杂度 O(n),时间复杂度O(nlogk)
思路
用字典记录出现的次数,接下来就是排序的问题了,默认的是用从小到大的排序,对于出现次数应该反着来,因此加个负号,二级排序按照字典序。
代码
python版本:
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# return topK string
# @param strings string字符串一维数组 strings
# @param k int整型 the k
# @return string字符串二维数组
#
class Solution:
def topKstrings(self , strings: List[str], k: int) -> List[List[str]]:
# write code here
hash_dict = {}
for ele in strings:
if ele not in hash_dict.keys():
hash_dict[ele] = 1
else:
hash_dict[ele] += 1
sort_list = sorted(hash_dict.items(), key=lambda kv:(-kv[1], kv[0]))
res = sort_list[:k]
return res
c++版本:
无