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
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP