1209. Remove All Adjacent Duplicates in String II

49 阅读1分钟

image.png

方法 stack

stack里存一个pair,记录字符,以及它是第几次连续出现了。

class Pair {
    char key; // 字符
    int val; // 第几次出现
    Pair(char key, int val) {
        this.key = key;
        this.val = val;
    }
}

class Solution {
    public String removeDuplicates(String s, int k) {
        // stack里存char,以及当前char是第几次出现的
        Stack<Pair> stack = new Stack<>();
        for (char c : s.toCharArray()) {
            if (!stack.isEmpty() && stack.peek().key == c) {
                // 之前已经连续出现k-1次了
                if (stack.peek().val == k - 1) { 
                    for (int i = 0; i < k - 1; i++) {
                        stack.pop(); // 凑够k个连续了,全pop
                    }
                } else {
                    stack.push(new Pair(c, stack.peek().val + 1));
                }
            } else {
                stack.push(new Pair(c, 1));
            }
        }

        // 构建res
        StringBuilder sb = new StringBuilder();
        while (!stack.isEmpty()) {
            sb.append(stack.pop().key);
        }

        return sb.reverse().toString();
    }
}