歡迎點擊「算法與編程之美」↑關注我們!
本文首發於微信公衆號:"算法與編程之美",歡迎關注,及時瞭解更多此係列文章。
問題描述
使用“棧”的方法完成括號匹配(給定一個字符串,判斷字符串裏的括號是否有效。)
正確匹配情況:(1)[](){} ;(2)([{}])
解決方案
先遍歷字符串把三對括號提出來,再利用‘棧’把左括號一個個的放入其中並且遍歷到右括號立即進行匹配。匹配成功後刪除‘棧’中的左括號並繼續,匹配失敗則返回‘False’.最後返回棧的長度,避免出現奇數個括號的錯誤。
注意:不可以把左括號全部放入一個‘棧’,右括號全部放入另一個‘棧’。然後進行匹配。
例如:“([{}])”和“([}{])”左右括號分別放入兩個棧的情況都是“([{”和“}])”,但是前一個是正確的,後一個是錯誤的。
實現代碼:
def zhan(s): #新建一個列表,存放括號,出掉非括號的字符 q = [] for i in s: if i == '(' or i == ')' or i == '[' or i == ']' or i == '{' or i == '}' : q.append(i) #利用棧匹配括號 l = [] for i in q: if i == '(' or i == '[' or i == '{': l.append(i) elif i == ')' and l[-1] == '(': l.pop() elif i == ']' and l[-1] == '[': l.pop() elif i == '}' and l[-1] == '{': l.pop() return len(l) == 0 s = "題中字符串" result = zhan(s) print(result) |
END
主 編 | 王文星
責 編 | 周茂林
where2go 團隊
微信號:算法與編程之美
長按識別二維碼關注我們!
溫馨提示:點擊頁面右下角“寫留言”發表評論,期待您的參與!期待您的轉發!