https://leetcode.com/problems/remove-duplicate-letters/
<문제>
Given a string s, remove duplicate letters so that every letter appears once and only once. (중복 X)
You must make sure your result is the smallest in lexicographical order among all possible results. (정렬)
<예시>
Input: s = "bcabc" Output: "abc"
Input: s = "cbacdcbc" Output: "acdb"
def removeDuplicateLetters(s: str) -> str:
d = {char: index for index, char in enumerate(s)}
final_s = []
for index, char in enumerate(s):
if char not in final_s:
# final_s가 비어있지 X AND
# 마지막의 요소보다 char의 우선순위가 높고 AND
# 마지막의 요소는 뒤에서 한 번 더 나타난다는 보장 있는 경우
# -> 마지막 요소 pop
while final_s and final_s[-1] > char and d[final_s[-1]] > index:
final_s.pop()
final_s.append(char)
return "".join(final_s)
코드는 짧지만, 생각하기 너무 어려웠던 문제 ...
www.youtube.com/watch?v=2ayws5Y-WM4
이해에 도움이 되었던 동영상 🙁
'다전공_컴퓨터공학 > 알고리즘 문제풀이' 카테고리의 다른 글
[파이썬 알고리즘] 12장 - 전화번호 문자 조합 (0) | 2020.12.25 |
---|---|
[파이썬 알고리즘] 12장 - 섬의 개수 (leetcode 200) (0) | 2020.12.25 |
[파이썬 알고리즘] 11장 - 중복문자 없는 가장 긴 부분 문자열 (leetcode 3) ⭐ (0) | 2020.12.21 |
[파이썬 알고리즘] 11장 - 상위 K빈도 요소 (leetcode 347) (0) | 2020.12.20 |
[파이썬 알고리즘] 11장 - 보석과 돌 (defaultdict, Counter 사용) (0) | 2020.12.20 |