利用棧實現括號匹配(python語言)


原理:

  1. 右括號總是與最近的左括號匹配 --- 棧的后進先出
  2. 從左往右遍歷字符串,遇到左括號就入棧,遇到右括號時,就出棧一個元素與其配對
  3. 當棧為空時,遇到右括號,則此右括號無與之匹配的左括號
  4. 當最終右括號匹配完畢后棧內還有剩余元素,則表明這些位置的左括號沒有與之匹配的右括號

 

代碼實現:

 1 # 1、創建一個Stack的類
 2 # 對棧進行初始化參數設計
 3 class Stack(object):
 4     def __init__(self,limit=10):
 5         self.stack = [] # 存放元素
 6         self.limit = limit # 棧容量極限
 7 
 8     # 進棧
 9     def push(self,data):
10         # 判斷棧是否溢出
11         if len(self.stack) >= self.limit:
12             raise IndexError('超出棧容量極限')
13         self.stack.append(data)
14 
15     # 退棧
16     def pop(self):
17         if self.stack:
18             return self.stack.pop()
19         else:
20             # 空棧不能被彈出元素
21             raise IndexError('pop from an empty stack')
22 
23     def peek(self):
24         # 查看棧的棧頂元素(最上面的元素)
25         if self.stack:
26             return self.stack[-1]
27 
28     # 判斷棧是否為空
29     def is_empty(self):
30         return not bool(self.stack)
31 
32     def size(self):
33         # 返回棧的大小
34         return len(self.stack)
35 
36 # 括號匹配  parenthesis 圓括號  parentheses:parenthesis的復數
37 def balanced_parentheses(parentheses):
38     stack = Stack(len(parentheses))
39     for parenthesis in parentheses:
40         # 如果是左括號,則入棧
41         if parenthesis == '(':
42             stack.push(parenthesis)
43         elif parenthesis == ')':
44             # 當棧為空時,遇到右括號,則此右括號無與之匹配的左括號
45             if stack.is_empty():
46                 return False
47             stack.pop()
48     # 棧為空,返回 True
49     # 棧不為空,返回 False
50     return stack.is_empty()
51 
52 if __name__ == '__main__':
53     examples = ['((()))','((())','(()))']
54     for example in examples:
55         print(example + ':' + str(balanced_parentheses(example)))

 


免責聲明!

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



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