Python 中反轉括號內子字串的程式


假設我們有一個包含字母和括號“(”和“)”的小寫字串 s。我們必須以遞迴方式反轉括號內包含的每個字串,並返回結果字串。

因此,如果輸入類似於 s = "back(aps)ce",則輸出將為“backspace”。

為了解決這個問題,我們將遵循以下步驟:

  • 定義一個函式 trav()。它將接收 s、dir、start、close:= close、ans:= ans 作為引數。

    • end := 如果 dir 與 -1 相同,則為 "(",否則為 ")"。

    • other := 如果 end 與 ")" 相同,則為 "(",否則為 ")"。

    • 當 start < s 的大小,並且 s[start] 與 end 不相同,則執行以下操作:

      • 如果 s[start] 與 other 相同,則執行以下操作:

        • trav(s, -dir, close[other, start] - dir)

        • start := close[other, start] + dir

      • 否則,執行以下操作:

        • 在 ans 的末尾插入 s[start]。

        • start := start + dir

  • 從主函式執行以下操作:

  • ans := 一個新的列表。

  • close := 一個新的對映,包含鍵“)”和“(”,初始值為兩個空對映。

  • stack := 一個新的列表。

  • 對於 s 中的每個索引 I 和值 c,執行以下操作:

    • 如果 c 與 "(" 相同,則執行以下操作:

      • 將 i 推入 stack。

    • 否則,當 c 與 ")" 相同,則執行以下操作:

      • o := stack 的頂部,然後從 stack 中彈出。

      • close[")", i] := o

      • close["(", o] := i

  • trav(s, 1, 0)

  • 返回 ans 與空字串連線的結果。

讓我們看看以下實現,以更好地理解:

示例

 線上演示

class Solution:
   def solve(self, s):
      ans = []
      close = {")": {}, "(": {}}
      stack = []
      for i, c in enumerate(s):
         if c == "(":
            stack.append(i)
         elif c == ")":
            o = stack.pop()
            close[")"][i] = o
            close["("][o] = i
      def trav(s, dir, start, close=close, ans=ans):
         end = "(" if dir == -1 else ")"
         other = "(" if end == ")" else ")"
         while start < len(s) and s[start] != end:
            if s[start] == other:
               trav(s, −dir, close[other][start] − dir)
               start = close[other][start] + dir
            else:
               ans.append(s[start])
               start += dir
      trav(s, 1, 0)
      return "".join(ans)
ob = Solution()
print(ob.solve("back(aps)ce"))

輸入

"back(aps)ce"

輸出

backspace

更新於: 2020-12-26

436 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.