棧應用之 括號匹配問題(Python 版)


棧應用之 括號匹配問題(Python 版)

檢查括號是否閉合

  • 循序掃描被檢查正文(一個字符)里的一個個字符
  • 檢查中跳過無關字符(所有非括號字符都與當前處理無關)
  • 遇到開括號將其壓入棧
  • 遇到閉括號時彈出當時的棧頂元素與之匹配
  • 如果匹配成功則繼續,發現匹配失敗時則以檢查失敗結束 
 1 def check_parens(text) :
 2     # 括號匹配檢查函數,text 是被檢查的正文串
 3     parens = "(){}[]"
 4     open_parens = "({["
 5     opposite = {")":"(", "}":"{", "]":"["}
 6     
 7     def parentheses(text) :
 8         # 括號生成器,每次調用返回text里的下一括號及其位置
 9         i.text_len = 0,len(text)
10         while True :
11             while i < text_len and text[i] not in parens :
12                 i += 1
13             if i >= text_len :
14                 return
15             yield text[i],i
16             i += 1
17 
18     st = SStack()  # 創建棧 st
19 
20     for pr , i in parentheses(text) :  # 對text里各括號和位置迭代
21         if pr in open_parens :      # 開括號,壓棧並繼續
22             st.push(pr)
23         elif st.pop() != opposite[pr] :  # 閉括號 若匹配失敗就退出
24             print("Unmatching is found at ",i,"for",pr)
25             return False
26         # else :  匹配成功什么也不做

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM