leetcode1080
Posted asenyang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode1080相关的知识,希望对你有一定的参考价值。
找到一个跟我的思路比较接近的参考解决方案:
1 class Solution: 2 def smallestSubsequence(self, text: str) -> str: 3 n = len(text) 4 d = collections.defaultdict(collections.deque) 5 # record index 6 for i,v in enumerate(text): 7 d[ord(v)-ord(‘a‘)].append(i) 8 9 # search orderly 10 keys = sorted(d.keys()) 11 res = [] 12 c = len(d) 13 last_index = -1 14 while len(res) < c: # len(res) will not larger than 26 15 # O(26*26) time, search the first smallest letter 16 for i in range(len(keys)): 17 if all(d[keys[i]][0] < d[keys[j]][-1] for j in range(i+1, len(keys))): 18 res.append(chr(ord(‘a‘)+keys[i])) 19 last_index = d[keys[i]][0] 20 keys.remove(keys[i]) 21 break 22 # O(n) time, delete all index less than last_index 23 for i in range(len(keys)): 24 while d[keys[i]] and d[keys[i]][0] < last_index: 25 d[keys[i]].popleft() 26 27 return ‘‘.join(res)
以上是关于leetcode1080的主要内容,如果未能解决你的问题,请参考以下文章
leetcode_1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold_[二维前缀和](代码片段
LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段