编程题目:写一段代码,判断包含括号 { [ ( ) ] } 的表达式是否合法

Posted 小黄人python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程题目:写一段代码,判断包含括号 { [ ( ) ] } 的表达式是否合法相关的知识,希望对你有一定的参考价值。

先入和元素后判断,后入的元素先判断。这符合栈的特征。

所以这里可以利用栈实现括号合法性的判断。

 

 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))

 

以上是关于编程题目:写一段代码,判断包含括号 { [ ( ) ] } 的表达式是否合法的主要内容,如果未能解决你的问题,请参考以下文章

写一段JAVA代码判断日期格式是不是正确

jquery-cookie判断是不是存在,求大神写一段js代码

java 怎么通过写一段代码来判断端口号是不是被占用。在Linux下。

如何判定括号合法性

第78题给定一个括号序列,判断是否是一个有效的括号序列

最强解析面试题:合法序括号序列判断