항해99 chap02
중복 문자 제거 - 스택
jeonbar2
2022. 1. 21. 02:35
중복 문자 제거
스택
중복된 문자를 제거하고 사전식 순서로 나열하라
입력 : "bcabc"
출력 : "abc"
입력 : "cbacdcbc"
출력 : "acdb"
from collections import Counter
def solution(s):
counter,seen,stack = Counter(s),set(),[]
for char in s:
counter[char]-=1
if char in seen:
continue
#뒤에 붙일 문자가 남아있다면 스택에서제거
while stack and char<stack[-1] and counter[stack[-1]]>0:
seen.remove(stack.pop())
stack.append(char)
seen.add(char)
return ''.join(stack)
print(solution("cbacdcbc"))
풀이
만약 현재 문자char가 스택에 쌓여 있는 문자 이고, 뒤에 다시붙일 문자가 남아있다면, 쌓아둔걸 꺼내서 없앤다. cbacdcbcd에서 a가 들어올때, 이미 이전에 들어와있던 c와 b는 제거된다.