给出一个字符串 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”
思路:以s = "(u(love)i)"为例,它的最后反转结果就是i love you,我们会发现,每经过两层括号,这一层里面的文字不用反转。但是如果根据层数的但偶来判断是否反转要记录的东西太多。果断放弃这种想法
如果考虑遍历,那么我们可以从左往右进行遍历,遇到左括号记录一个空串,遇到英文字母就计入该串,遇到右括号就把该串进行翻转。但是对于括号套括号的情况,即当已经遇到左括号之后又遇到左括号,那么必须建立一个新串,在遇到该新串的右括号的时候将新串翻转加到旧串上,当遇到该旧串的右括号时,就进行再次翻转。代码如下
class Solution {
public:
string reverseParentheses(string s) {
stack<string> stk;
string str;
for (auto &ch : s) {
if (ch == '(') {
stk.