책읽기
[파이썬 알고리즘 인터뷰][스택/큐] 중복 문자 제거
pythaac
2021. 7. 23. 21:09
이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다.
문제 정의
- 중복 문자 제거
- 사전식 순서로 나열
책에서 구현된 코드
# 재귀를 이용한 분리
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 ''
# 스택을 이용한 문자 제거
def removeDuplicateLetters(self, s: str) -> str:
counter, seen, stack = collections.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)
기억해야할 기법
- suffix 개념
- 문자열을 다룰 때, prefix와 suffix 고려할 것
- set을 이용한 중복 여부 확인
- string의 char 중복 여부를 확인할 때, 비효율적으로 생각하지 말고 set 활용할 것
- 사전식 순서 우선 탐색 전략
- 전체의 set과 suffix의 set이 같으면 생략 가능한 걸 이용
- 사전순으로 탐색하여, 중복된 문자 중 가장 먼저 나오는 문자만 확인할 수 있도록 구성
내가 구현한 코드
None
- Counter와 stack을 이용하려다가, Counter가 비효율적이라 생각해서 중도포기
- 일단 구현하기 - 문자열 문제에 대한 접근을 가장 어려워하는 듯