編程題目:寫一段代碼,判斷包含括號 { [ ( ) ] } 的表達式是否合法


先入和元素后判斷,后入的元素先判斷。這符合棧的特征。

所以這里可以利用棧實現括號合法性的判斷。

 

 1 #!/usr/bin/env python3
 2 
 3 def judge(expression):
 4         s = Stack()
 5         d = {'}':'{', ']':'[', ')':'('}
 6         for i in expression:
 7                 if i == '[' or i == '{' or i == '(':
 8                         s.push(i)
 9                 if i == ']' or i == '}' or i == ')':
10                         #當遍歷到后括號時,發現棧里沒有數據
11                         #說明表達式有問題
12                         if s.is_empty():
13                                 return False
14                         #或者出棧的數據和后括號對應的前括號不一樣
15                         #則表達式也有問題
16                         elif s.pop() != d[i]:
17                                 return False
18           #遍歷玩表達式后,要再次判斷一下棧是否為空
19         #如果不為空,說明表達式有問題。
20         if not s.is_empty():
21                 return False
22         else:
23                 return True
24 
25 
26 class Stack(object):
27         def __init__(self):
28                 self._elems = []
29 
30         def is_empty(self):
31                 return self._elems == []
32 
33         def push(self, elem):
34                 self._elems.append(elem)
35 
36         def pop(self):
37                 if self.is_empty():
38                         raise ValueError
39                 return self._elems.pop()
40 
41         def peek(self):
42                 if self.is_empty():
43                         raise ValueError
44                 return self._elems[-1]
45 
46 if __name__ == "__main__":
47         ep = "[a+b*(5-4)]*{x+b+b*{(1+2)}}"
48         ep1 = "[a+b*(5-4)]*{x+b+b*{{(1+2)}}"
49         print(judge(ep))
50         print(judge(ep1))

 


免責聲明!

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



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