LeetCode 1021. 删除最外层的括号 Remove Outermost Parentheses

【题目描述】

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

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

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

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

【示例1】

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

【示例2】

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

【示例3】

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

【提示】
S.length <= 10000
S[i] 为 "(" 或 ")"
S 是一个有效括号字符串

【思路】
1、想办法把一个有效字符串分裂成若干有效字符串;
2、然后把每一个有效字符串去除头和尾;
3、把若干去除头和尾的字符串拼接,最后返回;
4、由一个整形变量num来记录当一个字符等于"("时,num+=1;num==0时,一个有效字符串遍历完结;
5、当字符等于")"时,num-=1,这时如果num>0,依然要append该字符;
6、也可使用栈实现;

【Swift代码实现】

    func removeOuterParentheses(_ S: String) -> String {
        var num = Int()
        var index = Int()
        var strings = [String]()
        var remainString = String.init(S)
        for cha in S {
            if(cha == "(") {
                num+=1
            } else if(cha == ")") {
                num-=1
            }
            index+=1
            if(num == 0) {
                strings.append(String(remainString.prefix(index)))
                remainString.removeFirst(index)
                index = 0
            }
        }
        var result = String()
        for var str in strings {
            str.removeLast()
            str.removeFirst()
            result.append(str)
        }
        return result
    }

优化:

    func removeOuterParentheses(_ S: String) -> String {
        var num = Int()
        var result = String()
        for cha in S {
            if(cha == "(") {
                num+=1
                if(num > 1) {
                    result.append(cha)
                }
            } else if(cha == ")") {
                num-=1
                if(num > 0) {
                    result.append(cha)
                }
            }
        }
        return result
    }

你可能感兴趣的:(LeetCode 1021. 删除最外层的括号 Remove Outermost Parentheses)