Python程式:查詢使括號有效所需的最少刪除次數
假設我們有一個包含括號 '('、')' 和小寫英文字母的字串 s。我們必須刪除最小數量的括號('(' 或 ')',從任何位置)以便生成的括號字串有效,並最終返回任何有效的字串。這裡的括號字串在滿足所有這些條件時才是有效的:
字串為空且僅包含小寫字元,或者
字串可以寫成 AB(A 與 B 連線)的形式,其中 A 和 B 是有效的字串,或者
字串可以寫成 (A) 的形式,其中 A 是一個有效的字串。
因此,如果輸入類似於 s = "m)n(o)p",則輸出將是 "mn(o)p"
為了解決這個問題,我們將遵循以下步驟:
stack := 新建一個列表
indexes := 新建一個集合
i := 0
對於s中的每個字元c,執行:
如果c 等於 '(',則
將i壓入棧中
否則,如果c 等於 ')',則
如果棧的大小等於 0,則
將i插入到indexes中
否則,
從棧中彈出
i := i + 1
ret := 空字串
indexes := 將所有元素儲存到indexes中
對於從0到s的大小-1的範圍內的每個i,執行:
如果i不在indexes中,則
ret := ret + s[i]
返回ret
示例
讓我們看看下面的實現以更好地理解:
def solve(s): stack = [] indexes = set() i = 0 for c in s: if c == '(': stack.append(i) elif c == ')': if len(stack) == 0: indexes.add(i) else: stack.pop() i += 1 ret = '' indexes = indexes.union(stack) for i in range(len(s)): if i not in indexes: ret += s[i] return ret s = "m)n(o)p" print(solve(s))
輸入
"m)n(o)p"
輸出
mn(o)p
廣告