Python 中實現字串展開(n(t) 格式)的程式


假設我們有一個字串 s,它編碼了一個更長的字串。s 表示為 n(t) 的連線,n(t) 表示 t 連線 n 次,t 可以是普通字串,也可以是另一個遞迴編碼的字串。我們需要找到 s 的解碼版本。

因此,如果輸入類似於 s = "3(pi)2(3(am))0(f)1(u)",則輸出將為 "pipipiamamamamamamu"

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

  • i := 0

  • 定義一個函式 parse()。它將接收

  • ans := 一個新的列表

  • 當 i < s 的大小且 s[i] 不等於 ")" 時,執行以下操作:

    • 如果 s[i] 是數字,則:

      • d := 0

      • 當 s[i] 是數字時,執行以下操作:

        • d := 10 * d + s[i] 的整數部分

        • i := i + 1

      • i := i + 1

      • segment := parse()

      • i := i + 1

      • 將 segment 插入 ans 中 d 次

    • 否則:

      • 將 s[i] 插入到 ans 的末尾

      • i := i + 1

  • 返回連線 ans 中所有元素後的字串

  • 在主方法中返回 parse()

示例

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

即時演示

class Solution:
   def solve(self, s):
      i = 0
      def parse():
         nonlocal i
         ans = []
         while i < len(s) and s[i] != ")":
            if s[i].isdigit():
               d = 0
               while s[i].isdigit():
                  d = 10 * d + int(s[i])
                  i += 1
               i += 1
               segment = parse()
               i += 1
               ans.extend(segment for _ in range(d))
            else:
               ans.append(s[i])
               i += 1
         return "".join(ans)
         return parse()
ob = Solution()
s = "3(pi)2(3(am))0(f)1(u)"
print(ob.solve(s))

輸入

"3(pi)2(3(am))0(f)1(u)"

輸出

pipipiamamamamamamu

更新時間: 2020-12-23

299 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.