栈习题 -- 反转每个括号间的字串

192 阅读1分钟

一、题目详情

给出一个字符串 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 中只有小写英文字母和括号 我们确保所有括号都是成对出现的

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/re…

二、解答

class Solution {
    public String reverseParentheses(String s) {
        Stack<StringBuffer> stack = new Stack<>();
        stack.push(new StringBuffer());
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(') {
                StringBuffer buffer = new StringBuffer();
                stack.push(buffer);
            } else if (s.charAt(i) == ')') {
                StringBuffer pop = stack.pop();
                StringBuffer reverse = pop.reverse();
                stack.peek().append(reverse);
            } else {
                stack.peek().append(s.charAt(i));
            }
        }
        return stack.peek().toString();
    }
}