地址:https://www.nowcoder.com/practice/fd711bdfa0e840b381d7e1b82183b3ee?tpId=188&&tqId=38637&rp=1&ru=/activity/oj&qru=/ta/job-code-high-week/question-ranking
1 ''' 2 描述 3 給定一個字符串數組,再給定整數k,請返回出現次數前k名的字符串和對應的次數。 4 返回的答案應該按字符串出現頻率由高到低排序。如果不同的字符串有相同出現頻率,按字典序排序。 5 對於兩個字符串,大小關系取決於兩個字符串從左到右第一個不同字符的 ASCII 值的大小關系。 6 比如"ah1x"小於"ahb","231"<”32“ 7 字符僅包含數字和字母 8 9 [要求] 10 如果字符串數組長度為N,時間復雜度請達到O(N \log K)O(NlogK) 11 12 示例1 13 輸入: 14 ["a","b","c","b"],2 15 復制 16 返回值: 17 [["b","2"],["a","1"]] 18 說明: 19 "b"出現了2次,記["b","2"],"a"與"c"各出現1次,但是a字典序在c前面,記["a","1"],最后返回[["b","2"],["a","1"]] 20 21 示例2 22 輸入: 23 ["123","123","231","32"],2 24 返回值: 25 [["123","2"],["231","1"]] 26 說明: 27 "123"出現了2次,記["123","2"],"231"與"32"各出現1次,但是"231"字典序在"32"前面,記["231","1"],最后返回[["123","2"],["231","1"]] 28 29 ''' 30 31 ''' 32 1.先計數並存轉成list格式 33 2.先按照 出現數字降序 再按照字符升序排序 34 ''' 35 36 # 37 # return topK string 38 # @param strings string字符串一維數組 strings 39 # @param k int整型 the k 40 # @return string字符串二維數組 41 # 42 class Solution: 43 def topKstrings(self , strings , k ): 44 # write code here 45 res = {} 46 for i in strings: 47 if i not in res.keys(): 48 res[i] = 1 49 else: 50 res[i] +=1 51 resList = [] 52 for i in res.keys(): 53 resList.append([i,res[i]]) 54 resList.sort(key=lambda i : (-i[1],i[0])) 55 return resList[:k]