Remove Duplicate Letters

김_리트리버·2021년 4월 5일
0

[알고리즘]

목록 보기
42/47
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)
profile
web-developer

0개의 댓글