删除最外层的括号
有效括號(hào)字符串為空 ("")、"(" + A + “)” 或 A + B,其中 A 和 B 都是有效的括號(hào)字符串,+ 代表字符串的連接。例如,"","()","(())()" 和 “(()(()))” 都是有效的括號(hào)字符串。
如果有效字符串 S 非空,且不存在將其拆分為 S = A+B 的方法,我們稱其為原語(primitive),其中 A 和 B 都是非空有效括號(hào)字符串。
給出一個(gè)非空有效字符串 S,考慮將其進(jìn)行原語化分解,使得:S = P_1 + P_2 + … + P_k,其中 P_i 是有效括號(hào)字符串原語。
對(duì) S 進(jìn)行原語化分解,刪除分解中每個(gè)原語字符串的最外層括號(hào),返回 S 。
示例 1:
輸入:"(()())(())"
輸出:"()()()"
解釋:
輸入字符串為 “(()())(())”,原語化分解得到 “(()())” + “(())”,
刪除每個(gè)部分中的最外層括號(hào)后得到 “()()” + “()” = “()()()”。
示例 2:
輸入:"(()())(())(()(()))"
輸出:"()()()()(())"
解釋:
輸入字符串為 “(()())(())(()(()))”,原語化分解得到 “(()())” + “(())” + “(()(()))”,
刪除每個(gè)部分中的最外層括號(hào)后得到 “()()” + “()” + “()(())” = “()()()()(())”。
示例 3:
輸入:"()()"
輸出:""
解釋:
輸入字符串為 “()()”,原語化分解得到 “()” + “()”,
刪除每個(gè)部分中的最外層括號(hào)后得到 “” + “” = “”。
提示:
S.length <= 10000
S[i] 為 “(” 或 “)”
S 是一個(gè)有效括號(hào)字符串
解答
將列表轉(zhuǎn)成字符串''.join(list)
輸出
result= ['(', ')', '(', ')', '(', ')', '(', ')', '(', '(', ')', ')'] 轉(zhuǎn)換后: ()()()()(())我的解答
- 如果,count>0,則表示還有未匹配的(,count= count-1,result保存)
- 否則,說明遇到了兩個(gè)最外層的括號(hào)交接處,這個(gè))是孤獨(dú)的右括號(hào)此時(shí)count和result都不變,而且接下來的(不保存。
- flag 初始化為1,當(dāng)遇到孤獨(dú)的右括號(hào)時(shí),改變flag的狀態(tài)為0,以確保在遇到起始(時(shí),保證不把(添加進(jìn)result,也不增加count,同時(shí)需要更新flag的狀態(tài)為1,以確保內(nèi)部的(不受影響。接下來的其余時(shí)候,保證flag=1。
堆棧解決辦法
思路介紹:
result字符串保存結(jié)果
遍歷字符串
左括號(hào)入棧:若入棧后棧的長(zhǎng)度大于1,即該左括號(hào)不是原語首個(gè)左括號(hào),結(jié)果加入’(’
右括號(hào)出棧:若出棧后棧的長(zhǎng)度大于0,即該右括號(hào)不是原語末個(gè)右括號(hào),結(jié)果加入’)’
作者:dapao
鏈接:https://leetcode-cn.com/problems/remove-outermost-parentheses/solution/ji-jian-si-lu-pythonzhan-by-dapao/
來源:力扣(LeetCode)
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
總結(jié)
- 上一篇: 496. 下一个更大元素 I
- 下一篇: 503. 下一个更大元素 II