1021.删除最外层的括号(Remove Outermost Parentheses) | LeetCode 第 1021 题

删除最外层的括号

点击进入 LeetCode

有效括号字符串为空 ("")"(" + A + ")"A + B,其中 AB 都是有效的括号字符串,+ 代表字符串的连接。例如,"""()""(())()""(()(()))" 都是有效的括号字符串。

如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 AB 都是非空有效括号字符串。

给出一个非空有效字符串 S,考虑将其进行原语化分解,使得:S = P_1 + P_2 + ... + P_k,其中 P_i 是有效括号字符串原语。

S 进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 S

示例 1

输入:"(()())(())"
输出:"()()()"
解释:
输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())",
删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"

示例 2

输入:"(()())(())(()(()))"
输出:"()()()()(())"
解释:
输入字符串为 "(()())(())(()(()))",原语化分解得到 "(()())" + "(())" + "(()(()))",
删除每隔部分中的最外层括号后得到 "()()" + "()" + "()(())" = "()()()()(())"

示例 3

输入:"()()"
输出:""
解释:
输入字符串为 "()()",原语化分解得到 "()" + "()",
删除每个部分中的最外层括号后得到 "" + "" = ""

解题思路

本题主要问题在于:找出最外层括号的位置
我们记 “(” 出现的次数为 Lx ,“)” 出现的次数为 Rx。
示例 1 输入内容如下图所示:

次数 次数 次数 次数 次数 次数 次数 次数 次数 次数
L1 L2 L2 L3 L3 L3 L1 L2 L2 L2
R0 R0 R1 R1 R2 R3 R0 R0 R1 R2
( ( ) ( ) ) ( ( ) )

当 Lx = Rx 的时候,L1 为最外层的 “(”Rx 为最外层的 “)”

题解 JAVA 实现

点击查看其他解题方法

public String removeOuterParentheses(String S) {

        char[] charArray = S.toCharArray();

        int leftCount = 0;
        int rightCount = 0;

        StringBuilder result = new StringBuilder();

        for (char c : charArray) {
            if (c == '(') {
                leftCount++;
            } else {
                rightCount++;
            }
            if (leftCount == rightCount) {
                leftCount = 0;
                rightCount = 0;
            } else {
                if (leftCount != 1) {
                    result.append(c);
                }
            }
        }

        return result.toString();
    }
发布了7 篇原创文章 · 获赞 3 · 访问量 318

猜你喜欢

转载自blog.csdn.net/sl285720967/article/details/103134971
今日推荐