0%

1209. Remove All Adjacent Duplicates in String II

stack O(n) time O(n) space
维护一个<字符+频数>的stack 累计连续频数 每次连续频数达到k就出栈 最后把所有字符按频数拼接即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
string removeDuplicates(string s, int k) {
vector<pair<char, int>> stk;
for (char c : s) {
if (stk.empty() || stk.back().first != c) {
stk.emplace_back(c, 1);
} else if (++stk.back().second == k) {
stk.pop_back();
}
}
string res;
for (auto [c, n] : stk) {
res.append(n, c);
}
return res;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
string removeDuplicates(string s, int k) {
vector<pair<char, int>> stk;
for (char c : s) {
if (stk.empty() || stk.back().first != c) {
stk.emplace_back(c, 0);
}
if (++stk.back().second == k) {
stk.pop_back();
}
}
string res;
for (auto [c, n] : stk) {
res.append(n, c);
}
return res;
}
};