给出一个字符串 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<int> sta;
for(int i=0;i<s.size();i++)
{
char c=s[i];
if(c=='(')
sta.push(i);
else if(c==')')
{ int w=sta.top();
sta.pop();
reverse(s.begin()+w+1,s.begin()+i);
}
}
auto x=s.begin(),y=s.end();
while(x!=y)
{ if(*x=='('||*x==')')
s.erase(x);
else
x++;
}
return s;
}
};
分为两步:利用栈的特点,先找出字符串最里面括号内容并反转,再找出次里面的反转,直到没有括号。
再利用迭代器寻找括号并删除