Python|用“棧”的方法完成括號匹配

歡迎點擊「算法與編程之美」↑關注我們!

本文首發於微信公衆號:"算法與編程之美",歡迎關注,及時瞭解更多此係列文章。

問題描述

使用“棧”的方法完成括號匹配(給定一個字符串,判斷字符串裏的括號是否有效。)

正確匹配情況:(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 團隊


   

微信號:算法與編程之美          

長按識別二維碼關注我們!

溫馨提示:點擊頁面右下角“寫留言”發表評論,期待您的參與!期待您的轉發!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章