Given a string s
, remove duplicate letters so that every letter appears once and only once. You must make sure your result is
the smallest in lexicographical order among all possible results.
w
보다 사전순으로 뒤인 글자가w
보다 앞에 위치할 때, 이를 어떻게 해결할 것인가 이다.collections
의 Counter
모듈을 통해 s
내의 각 알파벳의 개수를 센 후,w
를 기준으로 stack
을 조정해준다.set
을 통해 한개씩만 들어갈 수 있도록 유지한다.from collections import Counter
class Solution:
def removeDuplicateLetters(self, s: str) -> str:
stack = []
counter = Counter(s)
isIn = set()
for w in s:
counter[w] -= 1
if w in isIn:
continue
while stack and stack[-1] > w and counter[stack[-1]] > 0:
# 뒤에 현재 stack[-1]의 문자가 남아있음
# 현재 w가 stack[-1]보다 사전순으로 앞임
isIn.remove(stack.pop())
stack.append(w)
isIn.add(w)
return ''.join(stack)