from collections import Counter
class Solution:
def removeDuplicateLetters(self, s: str) -> str:
counter, seen, stack = Counter(s), set(), []
for c in s:
counter[c] -= 1
if c in seen:
continue
while stack and c < stack[-1] and counter[stack[-1]] > 0:
r = stack.pop()
seen.remove(r)
stack.append(c)
seen.add(c)
return ''.join(stack)
주어진 str의 모든 문자가 등장하고, 문자의 순서를 바꾸는것 없이 가장 빠른 사전순의 문자열의 첫번째 문자를 찾는다
재귀 형태로 반복 수행한다
해당 문자를 가장 앞문자로 했을 때 하위 문자열에서 전체 문자열의 문자들이 빠짐없이 모두 등장한다면 해당 문자를 선택
the smallest character such that its suffix contains at least one copy of every character in the string.
suffix = s[s.index(c):]
set(s) == set(suffix)
class Solution:
def removeDuplicateLetters(self, s: str) -> str:
for c in sorted(set(s)):
suffix = s[s.index(c):]
if set(s) == set(suffix):
return c + self.removeDuplicateLetters(suffix.replace(c,''))
return ''