博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程题目:写一段代码,判断包含括号 { [ ( ) ] } 的表达式是否合法
阅读量:5290 次
发布时间:2019-06-14

本文共 1664 字,大约阅读时间需要 5 分钟。

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

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

 

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 False14 #或者出栈的数据和后括号对应的前括号不一样15 #则表达式也有问题16 elif s.pop() != d[i]:17 return False18 #遍历玩表达式后,要再次判断一下栈是否为空19 #如果不为空,说明表达式有问题。20 if not s.is_empty():21 return False22 else:23 return True24 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 ValueError39 return self._elems.pop()40 41 def peek(self):42 if self.is_empty():43 raise ValueError44 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))

 

转载于:https://www.cnblogs.com/xautxuqiang/p/6443519.html

你可能感兴趣的文章
(转)MSDN Library “已取消到该网页的导航”解决办法
查看>>
iOS-加载html字符串
查看>>
Shell 数组
查看>>
JavaStrip和python的变量存储位置
查看>>
【T_SQL】 基础 续
查看>>
cmd命令安装、卸载、启动和停止Windows Servic
查看>>
lightoj--1245--Harmonic Number (II)(数学推导)
查看>>
poj 1149 pigs ---- 最大流
查看>>
Swift中字符串转化为Class的方法
查看>>
使用RockMongo管理MongoDB
查看>>
20140213-想念是while里的死循环
查看>>
C语言运算符及其优先级汇总表口诀
查看>>
深入理解HTTP Session
查看>>
【转载】uclibc和glibc的差别
查看>>
搭建《深入Linux内核架构》的Linux环境
查看>>
Yuchuan_Linux_C 编程之三 静态库的制作和使用
查看>>
C#的最实用的的字符串加密解密方法大全
查看>>
前台通过window.localStorage存储用户名
查看>>
基于Flutter实现的仿开眼视频App
查看>>
析构器
查看>>