LeetCode 1021. 刪除最外層的括號(hào) Remove Outermost Parentheses

【題目描述】

有效括號(hào)字符串為空 ("")、"(" + A + ")" 或 A + B,其中 A 和 B 都是有效的括號(hào)字符串,+ 代表字符串的連接。例如,"","()","(())()" 和 "(()(()))" 都是有效的括號(hào)字符串。

如果有效字符串 S 非空,且不存在將其拆分為 S = A+B 的方法,我們稱其為原語(yǔ)(primitive),其中 A 和 B 都是非空有效括號(hào)字符串。

給出一個(gè)非空有效字符串 S,考慮將其進(jìn)行原語(yǔ)化分解,使得:S = P_1 + P_2 + ... + P_k,其中 P_i 是有效括號(hào)字符串原語(yǔ)。

對(duì) S 進(jìn)行原語(yǔ)化分解,刪除分解中每個(gè)原語(yǔ)字符串的最外層括號(hào),返回 S 。

【示例1】

輸入:"(()())(())"
輸出:"()()()"
解釋:
輸入字符串為 "(()())(())",原語(yǔ)化分解得到 "(()())" + "(())",
刪除每個(gè)部分中的最外層括號(hào)后得到 "()()" + "()" = "()()()"。

【示例2】

輸入:"(()())(())(()(()))"
輸出:"()()()()(())"
解釋:
輸入字符串為 "(()())(())(()(()))",原語(yǔ)化分解得到 "(()())" + "(())" + "(()(()))",
刪除每隔部分中的最外層括號(hào)后得到 "()()" + "()" + "()(())" = "()()()()(())"。

【示例3】

輸入:"()()"
輸出:""
解釋:
輸入字符串為 "()()",原語(yǔ)化分解得到 "()" + "()",
刪除每個(gè)部分中的最外層括號(hào)后得到 "" + "" = ""。

【提示】
S.length <= 10000
S[i] 為 "(" 或 ")"
S 是一個(gè)有效括號(hào)字符串

【思路】
1、想辦法把一個(gè)有效字符串分裂成若干有效字符串;
2、然后把每一個(gè)有效字符串去除頭和尾;
3、把若干去除頭和尾的字符串拼接,最后返回;
4、由一個(gè)整形變量num來(lái)記錄當(dāng)一個(gè)字符等于"("時(shí),num+=1;num==0時(shí),一個(gè)有效字符串遍歷完結(jié);
5、當(dāng)字符等于")"時(shí),num-=1,這時(shí)如果num>0,依然要append該字符;
6、也可使用棧實(shí)現(xiàn);

【Swift代碼實(shí)現(xiàn)】

    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
    }

優(yōu)化:

    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
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容