LeetCode 字典序最小子序列题解题目描述给定一个字符串 s移除重复字符使得每个字符只出现一次并且返回字典序最小的结果。示例输入s bcabc输出abc解题思路方法贪心思路统计每个字符出现的次数。遍历字符串使用栈来维护结果。如果当前字符比栈顶字符小并且栈顶字符在后面还会出现则弹出栈顶字符。将当前字符加入结果。复杂度分析时间复杂度O(n)。空间复杂度O(1)。代码实现def smallest_subsequence(s): count {} in_stack set() stack [] for char in s: count[char] count.get(char, 0) 1 for char in s: count[char] - 1 if char in in_stack: continue while stack and char stack[-1] and count[stack[-1]] 0: removed stack.pop() in_stack.remove(removed) stack.append(char) in_stack.add(char) return .join(stack) # 测试 def test_smallest_subsequence(): s bcabc print(smallest_subsequence(s)) # 输出abc if __name__ __main__: test_smallest_subsequence()总结字典序最小子序列是贪心算法的典型应用通过栈来维护结果确保字典序最小。