zoukankan      html  css  js  c++  java
  • 编程题目:写一段代码,判断包含括号 { [ ( ) ] } 的表达式是否合法

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

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

     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 16-8 泛型高级之通配符
    java 16 -7 泛型方法和泛型接口(泛型类相似)
    java 16-6 泛型
    java 16
    java 16 -4 LinkedList的特有功能
    java 16 -3 Vector的特有功能
    java 16-2 ArrayList的练习2
    java 16-1 ArrayList的练习1
    ll按时间排序和查看目录下文件数
    使用示例之线程调用自身
  • 原文地址:https://www.cnblogs.com/xautxuqiang/p/6443519.html
Copyright © 2011-2022 走看看