题目:
给出一个字符串 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;
}
};
本节完~