bool isValid(string S) {
// 用栈,从左到右扫,遇到c时弹出末尾的b和a
string stk;
for (char c : S) {
if (c == 'c') {
if (stk.empty() || stk.back() != 'b') return false;
stk.pop_back();
if (stk.empty() || stk.back() != 'a') return false;
stk.pop_back();
} else {
stk.push_back(c);
}
}
return stk.empty();
}
string removeDuplicates(string s, int k) {
vector<pair<char, int>> stk;
for (char c : s) {
if (stk.empty() || stk.back().first != c) {
stk.push_back({c, 1});
} else if (++stk.back().second == k) {
stk.pop_back();
}
}
string ans;
for (auto &e : stk) {
ans += string(e.second, e.first);
}
return ans;
}
string reverseParentheses(string s) {
string ans;
stack<int> open;
for (char c : s) {
if (c == '(') {
open.push(ans.size());
} else if (c == ')') {
int pos = open.top(); open.pop();
reverse(ans.begin() + pos, ans.end());
} else {
ans += c;
}
}
return ans;
}