Leetcode:1190. 反转每对括号间的子串(栈)

1190. 反转每对括号间的子串

给出一个字符串 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 中只有小写英文字母和括号
我们确保所有括号都是成对出现的
通过次数5,364提交次数9,991

栈的操作加反转,这道题用string栈来做真的太强了,还用push空字符串,真的相当巧妙,让我做的话就会存储索引,reverse string,但这种做法在栈内完成反转,相当的厉害,需要学习

class Solution {
    public String reverseParentheses(String s) {
        Stack<String>stack=new Stack<>();
        stack.push("");
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)=='('){
                stack.push("");
            }
            else if(s.charAt(i)==')'){
                String pop=stack.pop();
                StringBuilder pop2=new StringBuilder(stack.pop());
                for(int k=pop.length()-1;k>=0;k--){
                            char cc=pop.charAt(k);
                            pop2.append(cc);
                }
                stack.push(pop2.toString());
            }
            else{
                String pop=stack.pop();
                pop+=s.charAt(i);
                stack.push(pop);

            }
        }
        return stack.pop();

    }
}

你可能感兴趣的:(leetcode)