leetcode_316. 去除重複字母
阿新 • • 發佈:2020-12-08
給你一個字串 s ,請你去除字串中重複的字母,使得每個字母只出現一次。需保證 返回結果的字典序最小(要求不能打亂其他字元的相對位置)。 注意:該題與 1081 https://leetcode-cn.com/problems/smallest-subsequence-of-distinct-characters 相同 示例 1: 輸入:s = "bcabc" 輸出:"abc" 示例 2: 輸入:s = "cbacdcbc" 輸出:"acdb" 提示: 1 <= s.length <= 104 s 由小寫英文字母組成 來源:力扣(LeetCode) 連結:https://leetcode-cn.com/problems/remove-duplicate-letters 著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
class Solution: def removeDuplicateLetters(self, s: str) -> str: stack=[] temp_set=set()#字元是否已經存在 dic={} for i in range(len(s)): dic[s[i]]=i#字元最後出現位置 for i, x in enumerate(s): if not stack :#如果stack為空 stack.append(x) temp_set.add(x) if x in temp_set:#如果已經在集合中 continue while(stack and stack[-1]>x and i<dic[stack[-1]]): #如果stack非空,棧頂大於x 且後面還有棧頂元素 t=stack.pop() temp_set.remove(t) else: stack.append(x) temp_set.add(x) return ''.join(stack)