给出一个字符串 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”
提示:
0 <= s.length <= 2000
s 中只有小写英文字母和括号
我们确保所有括号都是成对出现的
题解:每次遇到"(",将字符串压入栈;遇到")",先反转这个串,再把栈顶的串加到这个串前(因为要反转),弹出栈顶元素。
class Solution {
public:
string reverseParentheses(string s) {
stack<string> st;
string str;
for(int i=0;i<s.size();i++) {
if(s[i]=='(') {
st.push(str);
str="";
} else if(s[i]==')') {
reverse(str.begin(),str.end());
str=st.top()+str;
st.pop();
} else {
str+=s[i];
}
}
return str;
}
};