문제 링크 : https://leetcode.com/problems/remove-all-adjacent-duplicates-in-string-ii/description/
주어진 s에서 k만큼 겹치는 숫자들을 제거한 나머지를 반환하는 문제이다.
s의 문자들을 [문자, 개수]로 저장할 stack을 만들고
stack안의 개수가 k와 같아지면 pop한다.
이후 stack의 글자들을 반환한다.
시간 복잡도는 O(N). (N = |s|)
class Solution:
def removeDuplicates(self, s: str, k: int) -> str:
stack = [] #[char, cnt]
for i in s:
if stack and stack[-1][0] == i:
stack[-1][1] +=1
else:
stack.append([i, 1])
if stack[-1][1] == k:
stack.pop()
return ''.join(i * cnt for i, cnt in stack)