import collections
# input 문자열에서 중복을 없애는데
# 사전식 순서로 정렬
# set 으로 중복제거하고 알파벳순으로 정렬하면 안됨
class Solution:
def removeDuplicateLetters(self, s: str) -> str:
# 중복이 아닌, 사전식 순서로 배치된 char 를 모아놓을 공간이 필요
stack = []
counter = collections.Counter(s)
# 전체 문자열에서 중복인지 확인, 기존에 stack 에 들어가 있던 문자가 현재문자에 비해 순서가 뒤인데, 중복까지 되면 제거
# stack 에서 중복인지 확인, 중복이면 확인할 필요가 없이 다음 char 진행
for char in s:
counter[char] -= 1
# 이미 stack 에 반영이 된 문자는 확인하지 않는다 .
if(char in stack):
continue
# stack 에 들어가 있는 char들 보다 현재 char 가 순서가 앞이고, stack 안의 char 가 중복이면
# 기존에 있던걸 다빼고 현재 char 만 들어가야 함
while stack and char < stack[-1] and counter[stack[-1]] > 0:
stack.pop()
stack.append(char)
return ''.join(stack)