括號匹配
從空棧開始,從左到右處理括號字符串。如果一個符號是一個開始符號,將其作爲一個信號,對應的結束符號稍後會出現。另一方面,如果符號是結束符號,彈出棧,只要彈出棧的開始符號可以匹配每個結束符號,則括號保持匹配狀態。如果任何時候棧上沒有出現符合開始符號的結束符號,則字符串不匹配。最後,當所有符號都被處理後,棧應該是空的。
在 Python 中,方括號 [ 和 ] 用於列表,花括號 { 和 } 用於字典。括號 ( 和 ) 用於元祖和算術表達式。只要每個符號都能保持自己的開始和結束關係,就可以混合符號。。符號字符串如
{ { ( [ ] [ ] ) } ( ) }
[ [ { { ( ( ) ) } } ] ]
這些被恰當的匹配了,因爲不僅每個開始符號都有對應的結束符號,而且符號的類型也匹配。相反這些字符串沒法匹配:
( [ ) ]
[ { ( ) ]
from python_basic_stack.stack_definition import Stack def matches(open, close): # top symbol opens = "([{" closers = ")]}" # 對比下標位置是否相同 return opens.index(open) == closers.index(close) # 定義一個符號匹配函數 def symbolmatch(symbolString): # 初始化一個棧 s = Stack() balanced = True # 初始下標 index = 0 # 遍歷symbolString {{([][])}()} [{()] while index < len(symbolString) and balanced: symbol = symbolString[index] if symbol in "([{": s.push(symbol) else: print(s.list1()) if s.isEmpty(): balanced = False else: # 輸出棧頂 top=s.peek() print(top) s.pop() if not matches(top, symbol): balanced = False index += 1 if balanced and s.isEmpty(): return True else: return False print(symbolmatch('{{([][])}()}')) print(symbolmatch('[{()]'))