1. 程式人生 > 實用技巧 >資料結構中,用Python 解決各種括號匹配疑難雜症

資料結構中,用Python 解決各種括號匹配疑難雜症

本文主要是解決括號匹配的問題。

整體實現思路:藉助Python 的List 來實現 ,因為列表的Append 方法相當於棧的Push 方法即棧的壓入,列表的Pop 方法相當於棧的Pop 方法即彈出。

詳細的思路

首先,設定一個字典,用於存放我們要遍歷的符號型別。

其次,是設定兩個列表分別存放的是各種括號的開括號和閉括號,然後遍歷給定的字串,分如下幾種情況:

  • 字串為空時直接輸出True

  • 字串的符號不成對匹配時輸出False

  • 字串中的符號不是字典中的符號型別時,直接忽略

  • 遍歷字串,將正向的符號壓入棧內,遍歷到的字元如果是正向符號(正好是最近的一個符號時)的匹配內容就彈出棧

程式碼實現如下

 1 #定義要檢查匹配的符號型別
 2 brackets = {'}': '{', ']': '[', ')': '(', '>': '<'}
 3 #將符號的正反向進行分類
 4 bracket_l, brackets_r = brackets.values(), brackets.keys()
 5  
 6 #定義一個檢查字串的方法
 7 def check(str1):
 8     alist = [] #定義一個空列表
 9     for c in str1:
10         if c in bracket_l:
11             alist.append(c)#
將左符號壓入棧內 12 elif c in brackets_r:#右符號要麼出棧,要麼匹配失敗,不做處理 13 if alist and alist[-1] == brackets[c]:#判斷alist不會空且alist最後一個字元等於左符號對應的右符號時 14 alist.pop() #就做出棧操作 15 else: 16 return False 17 return True #傳入空的字串直接返回true 18 19 if __name__ == '
__main__': 20 print(check("6c[*]{7b +[(8e -s3) * (d4+t5)]}<<>>")) 21 print(check("6c*{7b+ [8e- 9f]}<>")) 22 print(check(""))

溫馨提示:在閱讀本文前可以提前看一看棧的上上篇文章《Python 之“棧為何物”》,因為本文是在這篇文章的基礎上進行的應用,這裡面的實現邏輯非常有意思,同時也體現了演算法的精妙之處,值得大家一探究竟。

歡迎關注【無量測試之道】公眾號,回覆【領取資源】,
Python程式設計學習資源乾貨、
Python+Appium框架APP的UI自動化、
Python+Selenium框架Web的UI自動化、
Python+Unittest框架API自動化、

資源和程式碼 免費送啦~
文章下方有公眾號二維碼,可直接微信掃一掃關注即可。

備註:我的個人公眾號已正式開通,致力於測試技術的分享,包含:大資料測試、功能測試,測試開發,API介面自動化、測試運維、UI自動化測試等,微信搜尋公眾號:“無量測試之道”,或掃描下方二維碼:

新增關注,讓我們一起共同成長!