문제링크
LeetCode
문제
주어진 문장 s에서 인접한 동일한 문자가 k개 이상 발견되면, 해당 문자들을 지워 남은 문장을 반환합니다.
풀이
리트코드 1047번 문제와 유사한 문제로 스택을 생각하고 문제풀이에 접근해야 합니다.
먼저, 1047번처럼 문자스택에 문자를 집어넣으면서 이동합니다. 이 때, 동일한 문자가 나온 횟수를 저장하는 스택을 추가로 사용하여, 스택의 top+1이 k가 될 때, 인접한 동일한 문자가 없을 때까지, 지워줍니다.
코드
class Solution {
private static final int DEFAULT_VALUE = 1;
public String removeDuplicates(String s, int k) {
String answer = "";
List<Integer> stack = new ArrayList<>();
for(int i = 0; i<s.length(); i++) {
char curCharacter = s.charAt(i);
if(answer.isEmpty()) {
answer += curCharacter;
stack.add(DEFAULT_VALUE);
continue;
}
int stackTopIndex = stack.size()-1;
char strTop = answer.charAt(answer.length()-1);
int stackTop = stack.get(stackTopIndex);
if(strTop == s.charAt(i)) {
if(stackTop+1 == k) {
answer = answer.substring(0, answer.length()-stackTop);
stack.remove(stackTopIndex);
} else {
answer += curCharacter;
stack.set(stackTopIndex, stackTop+1);
}
continue;
}
answer+=curCharacter;
stack.add(DEFAULT_VALUE);
}
return answer;
}
}