1. 题目来源
2. 题目解析
括号序列一般都是栈来处理。
用 str
来维护当前层所遍历到的字符串,栈来维护左括号与左括号之间的字符串。
思路:
- 左括号:就将本层的
str
加入到栈中,将str
清空,接收下一层的字符串。入栈的字符串就等待对应的右括号来,再反转出栈。 - 右括号:将当前的
str
反转,因为当前是在本层的str
已经匹配好了括号。再将栈顶的字符串加到str
的左边,等待下一个右括号。 - 字符:直接加到
str
后面即可。
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)
代码:
class Solution {
public:
string reverseParentheses(string s) {
stack<string> stk;
string str;
for (auto &c : s) {
if (c == '(') {
stk.push(str);
str = "";
} else if (c == ')') {
reverse(str.begin(), str.end());
str = stk.top() + str;
stk.pop();
} else str += c;
}
return str;
}
};