日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

删除最外层的括号

發布時間:2025/1/21 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 删除最外层的括号 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 刪除最外層的括號
    有效括號字符串為空 ("")、"(" + 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 是一個有效括號字符串

    解答
    將列表轉成字符串''.join(list)

    print('result=',result) print('轉換后:',''.join(result))

    輸出

    result= ['(', ')', '(', ')', '(', ')', '(', ')', '(', '(', ')', ')'] 轉換后: ()()()()(())

    我的解答

  • 去掉最外面的(和),得到r
  • count 未匹配的(的數量。
  • result保存刪除最外層括號后的結果
  • 遍歷r,如果是(,count= count+1,result保存(。如果是)則要分情況
    • 如果,count>0,則表示還有未匹配的(,count= count-1,result保存)
    • 否則,說明遇到了兩個最外層的括號交接處,這個)是孤獨的右括號此時count和result都不變,而且接下來的(不保存。
  • 下面一個(不保存怎么解決呢?怎么知道遍歷到的(要不要保存呢?flag起作用了。
    • flag 初始化為1,當遇到孤獨的右括號時,改變flag的狀態為0,以確保在遇到起始(時,保證不把(添加進result,也不增加count,同時需要更新flag的狀態為1,以確保內部的(不受影響。接下來的其余時候,保證flag=1。
  • flag標志位的使用
  • 列表轉成字符串''.join(list)
  • class Solution:def removeOuterParentheses(self, S: str) -> str:r = S[1:-1]print(r)count = 0result = []flag = 1for i, item in enumerate(r):if r[i] == '(':if flag:count += 1result.append(item)else:# 前面是孤獨的右括號flag = 1else:if count > 0:flag = 1count -= 1result.append(')')else:flag = 0#count ==0 孤獨的右括號result = ''.join(result)return result

    堆棧解決辦法

    思路介紹:
    result字符串保存結果
    遍歷字符串
    左括號入棧:若入棧后棧的長度大于1,即該左括號不是原語首個左括號,結果加入’(’
    右括號出棧:若出棧后棧的長度大于0,即該右括號不是原語末個右括號,結果加入’)’

    作者:dapao
    鏈接:https://leetcode-cn.com/problems/remove-outermost-parentheses/solution/ji-jian-si-lu-pythonzhan-by-dapao/
    來源:力扣(LeetCode)
    著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

    stack = [] result = [] for item in S:if item=='(':stack.append(item)if len(stack)>1:result.append(item)else:if len(stack)>1:result.append(item)stack.pop() print('result=',result) print('轉換后:',''.join(result))

    總結

    以上是生活随笔為你收集整理的删除最外层的括号的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。