1.题目详情
给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。
2.解题思路
栈,厘清题目要求,如何才能使返回的字符序列最小?
3.代码实现
class Solution:
def removeDuplicateLetters(self, s):
stack = []
dic = collections.Counter(s) #统计单个元素的个数
for char in s:
if char not in stack:
#如果当前字符不在栈中,进行操作,如果在栈中的话不用添加,直接抛弃,因为字典序要求最小
while stack and char < stack[-1] and dic[stack[-1]] > 0:
#栈不空,当前字符小于栈顶元素且栈顶元素不是最后一个,才pop
stack.pop()
stack.append(char) #添加当前元素
dic[char] -= 1 #无论当前元素是否入栈,统计个数减掉一,因为主要是用于判断有没有到最后一个元素
return ''.join(stack)
4.知识点
–