python---括号匹配
"""
括号匹配
输入: "()[]{}" 输出true
输入:"([)]" 输出false
输入:")(()))" 输出false
输入:"()" 输出true
输入:"((([])))" 输出true
输入:"]][[" 输出false
输入:([)] 输出false
"""
def bracket_match_v1(brackets_str):
brackets_dict = {'(': ')', '[': ']', '{': '}'}
# 右括号开头
if brackets_str[0] in brackets_dict.values():
return False
# 左括号开头
brackets_stack = []
for bracket in brackets_str:
# 左括号进栈
if bracket in brackets_dict.keys():
brackets_stack.append(bracket)
# 右括号 去匹配栈顶元素是否对应
elif bracket in brackets_dict.values():
if brackets_dict[brackets_stack.pop()] != bracket:
return False
if not brackets_stack:
return True
return False
def bracket_match_v2(brackets_str):
"""简化版"""
brackets_dict = {')': '(', ']': '[', '}': '{'}
brackets_stack = []
for bracket in brackets_str:
# 左括号
if bracket in brackets_dict.values():
brackets_stack.append(bracket)
# 右括号, 包含右括号开头
elif not brackets_stack or brackets_dict[bracket] != brackets_stack.pop():
return False
return not brackets_stack
print(bracket_match_v1("()[]{}"))
print(bracket_match_v1("([)]"))
print(bracket_match_v1(")(()))"))
print(bracket_match_v1("()"))
print(bracket_match_v1("((([])))"))
print(bracket_match_v1("]][["))
print(bracket_match_v1("([)]"))
print('-' * 66)
print(bracket_match_v2("()[]{}"))
print(bracket_match_v2("([)]"))
print(bracket_match_v2(")(()))"))
print(bracket_match_v2("()"))
print(bracket_match_v2("((([])))"))
print(bracket_match_v2("]][["))
print(bracket_match_v2("([)]"))
python---括号匹配的更多相关文章
- 栈应用之 括号匹配问题(Python 版)
栈应用之 括号匹配问题(Python 版) 检查括号是否闭合 循序扫描被检查正文(一个字符)里的一个个字符 检查中跳过无关字符(所有非括号字符都与当前处理无关) 遇到开括号将其压入栈 遇到闭括号时弹出 ...
- python实现括号匹配
1.用一个栈[python中可以用List]就可以解决,时间和空间复杂度都是O(n) # -*- coding: utf8 -*- # 符号表 SYMBOLS = {'}': '{', ']': '[ ...
- python栈--字符串反转,括号匹配
栈的实现: # 定义一个栈类 class Stack(): # 栈的初始化 def __init__(self): self.items = [] # 判断栈是否为空,为空返回True def isE ...
- Python凯撒密码和括号匹配
1.凯撒密码: 除了特殊字符不转化,其余的按照规定经行转译,以下以a~z和A~Z的字符都进行转译. plaincode = input("")print(len(plaincode ...
- Python面试题:使用栈处理括号匹配问题
括号匹配是栈应用的一个经典问题, 题目 判断一个文本中的括号是否闭合, 如: text = "({[({{abc}})][{1}]})2([]){({[]})}[]", 判断所有括 ...
- 利用栈实现括号匹配(python语言)
原理: 右括号总是与最近的左括号匹配 --- 栈的后进先出 从左往右遍历字符串,遇到左括号就入栈,遇到右括号时,就出栈一个元素与其配对 当栈为空时,遇到右括号,则此右括号无与之匹配的左括号 当最终右括 ...
- 括号匹配 区间DP (经典)
描述给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来 ...
- YTU 3003: 括号匹配(栈和队列)
3003: 括号匹配(栈和队列) 时间限制: 1 Sec 内存限制: 128 MB 提交: 2 解决: 2 [提交][状态][讨论版] 题目描述 假设一个表达式中只允许包含三种括号:圆括号&quo ...
- [原]NYOJ 括号匹配系列2,5
本文出自:http://blog.csdn.net/svitter 括号匹配一:http://acm.nyist.net/JudgeOnline/problem.php?pid=2 括号匹配二:htt ...
- POJ C程序设计进阶 编程题#4:括号匹配问题
编程题#4:扩号匹配问题 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 在某 ...
随机推荐
- LGP7847题解
题意:给定 \(n\),求方程 \(\frac 1 a - \frac 1 b=\frac 1 n\) 的所有解,且解必须满足 \(\gcd(a,b,n)=1\). 以下内容搬运自官方题解: 转化一下 ...
- linux下oracle数据库的启动
linux下oracle数据库的启动 一.切换oracle用户 命令:su - oracle 二.运行sqlplus命令,进入sqlplus环境 命令:sqlplus /nolog (nolog参数表 ...
- Java案例——ArrayList存储学生对象并遍历
package ArrayListDemo;import java.util.ArrayList;import java.util.Scanner;/*案例:存储学生对象并遍历 需求:创建一个存储学生 ...
- java-关于java
JavaSE(标准版) JavaME(嵌入式)(淘汰) JavaEE(E企业级开发) JavaSE是基础 API端口 JDK Java开发工具 JRE Java运行时环境 JVM 虚拟机 可以在软件和 ...
- centos7使用chrony同步阿里云时间
1.yum -y install chrony2.cp /etc/chrony.conf /etc/chrony.conf.bak3.sed -i '/^server/s/^/#/g' /etc/ch ...
- Python tkinter库将matplotlib图表显示在GUI窗口上,并实时更新刷新数据
代码 1 ''' 2 使用matplotlib创建图表,并显示在tk窗口 3 ''' 4 import matplotlib.pyplot as plt 5 from matplotlib.pylab ...
- 使用postman进行post请求传递中文导致后台接收乱码的问题
1.个人猜测估计是如果header里不指明编码的话,经过tomcat服务器时会导致转换乱码信息,这样就算你在filter里配置了EncodingFilter相关的过滤器也无济于事.. 解决方法就是在h ...
- Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?
配置变更JDK 版本升级第三方类库升级响应式 Spring 编程支持HTTP/2 支持配置属性绑定更多改进与加强-
- 客户端注册 Watcher 实现 ?
1.调用 getData()/getChildren()/exist()三个 API,传入 Watcher 对象 2.标记请求 request,封装 Watcher 到 WatchRegistrati ...
- memcached 的多线程是什么?如何使用它们?
线程就是定律(threads rule)!在 Steven Grimm 和 Facebook 的努力下, memcached 1.2 及更高版本拥有了多线程模式.多线程模式允许 memcached 能 ...