题目
给出一个字符串 s(仅含有小写英文字母和括号)。
请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。
注意,您的结果中 不应 包含任何括号。
示例 1
输入:s = "(abcd)"
输出:"dcba"
示例 2
输入:s = "(u(love)i)"
输出:"iloveu"
示例 3
输入:s = "(ed(et(oc))el)"
输出:"leetcode"
示例 4
输入:s = "a(bcdefghijkl(mno)p)q"
输出:"apmnolkjihgfedcbq"
题解
使用栈,不是右括号就入栈,碰到右括号,拿出当前括号里面的数,再次放进栈中,最终栈存放的数据是我们期望的数,进行前缀相加即可。
class Solution {
public:
string reverseParentheses(string s) {
stack<char> st;
for (auto c : s) {
if (c != ')') {
st.push(c);
} else {
string tmp;
while (st.top() != '(') {
tmp += st.top();
st.pop();
}
st.pop();
for (auto s : tmp) {
st.push(s);
}
}
}
string ans;
while (!st.empty()) {
ans = st.top() + ans; st.pop();
}
return ans;
}
};