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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-substrings-between-each-pair-of-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    public String reverseParentheses(String s) {
        Stack<Character> stack = new Stack<>();
        int length = s.length();
        char[] arr = new char[length];
        for (int i = 0; i < length; i++) {
            char c = s.charAt(i);
            if (c == ')') {
                int index = 0;
                while (( c = stack.pop()) != '(') {
                    arr[index++] = c;
                }
                for (int j = 0; j < index; j++) {
                    stack.add(arr[j]);
                }
            } else {
                stack.add(c);
            }
        }
        int index = length - 1;
        while (!stack.isEmpty()) {
            arr[index--] = stack.pop();
        }
        return new String(arr, index + 1, length - index - 1);
    }

posted @ 2021-05-17 14:22  旺仔古李  阅读(53)  评论(0编辑  收藏  举报