알고리즘 - 중복 문자 제거
중복된 문자를 제외하고 사전식 순서로 나열하라.
Input | Output |
---|---|
s = “bcabc” | “abc” |
s = “cbacdcbc” | “acdb” |
Solution1 (스택을 이용한 문자 제거)
class Solution:
def removeDuplicateLetters(self, s: str) -> str:
counter, stack = collections.Counter(s), []
for char in s:
counter[char] -= 1
if char in stack:
continue
while stack and char < stack[-1] and and counter[stack[-1]] > 0:
stack.pop()
stack.append(char)
return ''.join(stack)
현재 문자가 스택에 쌓여있는 문자(이전 문자보다 앞선 문자)이고, 뒤에 다시 붙일 문자가 남아 있다면(카운터가 0 이상 이라면) 쌓아둔 걸 꺼내서 없앤다.
Solution2 (재귀를 이용한 풀이) ** TODO
class Solution:
def removeDuplicateLetters(self, s: str) -> str:
# 집합으로 정렬
for char in sorted(set(s)):
suffix = s[s.index(char):]
# 전체 집합과 접미사 집합이 일치할 때 분리 진행
if set(s) == set(suffix):
return char + self.removeDuplicateLetters(suffix.replace(char, ''))
return ''
댓글남기기