方法 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();
}
}