这个在本科学习数据结构的时候已经接触很多了,主流的思想是借助栈的压入、弹出来进行匹配,至于python的话可以使用列表来完成这个操作,因为列表的append方法相当于栈的push方法,列表的pop方法相当于栈的pop方法。

主要的思路:

首先设置两个列表分别存放的是各种括号的开括号和闭括号,然后遍历给定的字符串,分如下几种情况:

1.字符串首字符出现在闭括号列表中,直接结束,输出错误

2.字符串长度不为偶数,直接结束,输出错误

3.对原始字符串列表化去重,如果去重后的列表长度不为偶数直接结束,输出错误

4,遍历字符串,将属于开括号集合的括号加入到列表中,当遇上一个闭括号的时候计算该闭括号在闭括号列表中的索引与当前列表最后一个开括号在开括号列表中的索引是否一致,一致则继续,否则直接结束,输出错误

主要是在长度很大的时候可以尽快判断一些比较明显的错误的模式,节省时间,按照这个简单的思想,下面是具体的实现:

#!usr/bin/env python
#encoding:utf-8'''
__Author__:沂水寒城
功能:括号匹配的相关问题
'''def bracket_mathch(one_str):'''括号匹配'''tmp_list=[]open_bracket_list=['(','[','{','<','《']close_bracket_list=[')',']','}','>','》']one_str_list=list(one_str)length=len(one_str_list)set_list=list(set(one_str_list))num_list=[one_str_list.count(one) for one in set_list]if one_str[0] in close_bracket_list:return Falseelif length%2!=0:return Falseelif len(set_list)%2!=0:return Falseelse: for i in range(length):if one_str[i] in open_bracket_list:tmp_list.append(one_str[i])elif one_str[i] in close_bracket_list:if close_bracket_list.index(one_str[i])==open_bracket_list.index(tmp_list[-1]):tmp_list.pop()else:return Falsebreak return Trueif __name__ == '__main__':one_str_list=['({})','({[<《》>]})','[(]){}','{{{{{{','([{}])','}{[()]']for one_str in one_str_list:if bracket_mathch(one_str):print one_str, '正确'else:print one_str, '错误'tmp='{}[{()()[]<{{[[[[(())()()(){}[]{}[]()<>]]]]}}>}]'print bracket_mathch(tmp)

结果如下:

({}) 正确
({[<《》>]}) 正确
[(]){} 错误
{{{{{{ 错误
([{}]) 正确
}{[()] 错误
True
[Finished in 0.3s]

python求解括号匹配的相关问题相关推荐

  1. python实现括号匹配代码_python实现括号匹配的思路详解

    1.用一个栈[python中可以用List]就可以解决,时间和空间复杂度都是O(n) # -*- coding: utf8 -*- # 符号表 SYMBOLS = {'}': '{', ']': '[ ...

  2. python实现括号匹配不用栈_使用Python实现栈,判断括号是否平衡

    栈(Stack)在计算机领域是一个被广泛应用的集合,栈是线性集合,访问都严格地限制在一段,叫做顶(top). 举个例子,栈就想一摞洗干净的盘子,你每次取一个新盘子,都是放在这一摞盘子的最上头,当你往里 ...

  3. python实现括号匹配

    1. 用一个栈[python中可以用List]就可以解决,时间和空间复杂度都是O(n) # -*- coding: utf8 -*- # 符号表 SYMBOLS = {'}': '{', ']': ' ...

  4. python实现括号匹配_python实现括号匹配

    主要的思路: 首先设置两个列表分别存放的是各种括号的开括号和闭括号,然后遍历给定的字符串,分如下几种情况: 1.字符串首字符出现在闭括号列表中,直接结束,输出错误 2.字符串长度不为偶数,直接结束,输 ...

  5. python括号匹配o(1)复杂度_Python面试题:使用栈处理括号匹配问题

    括号匹配是栈应用的一个经典问题, 题目 判断一个文本中的括号是否闭合, 如: text = "({[({{abc}})][{1}]})2([]){({[]})}[]", 判断所有括 ...

  6. python实现括号匹配算法_Python实现括号匹配方法详解

    这篇文章主要简介了python实现括号匹配方法详解,文中通过示例代码简介的非常具体,对大家的学习或者工作具有一定的参考学习网上卖,需要的朋友可以学习下 1.用一个栈[python中可以用List]就可 ...

  7. 2.2栈的另一个应用:括号匹配

    2.2栈的另一个应用:括号匹配 1.LeetCode官网 美网:https://leetcode.com/ 中文网 :https://leetcode-cn.com/ 英语不咋地,所以选择此处选择中文 ...

  8. python 判断括号是否匹配_使用Python实现一个栈判断括号是否平衡

    栈(Stack)在计算机领域是一个被广泛应用的集合,栈是线性集合,访问都严格地限制在一段,叫做顶(top). 举个例子,栈就想一摞洗干净的盘子,你每次取一个新盘子,都是放在这一摞盘子的最上头,当你往里 ...

  9. python 栈_Python数据结构与算法05:基本结构:栈的应用之括号匹配

    注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为7分钟. 算法流程 括号匹配情况介绍 我们经常会遇到类似(9-1)*(8+7)/(4-2).print(& ...

  10. 栈应用之 括号匹配问题(Python 版)

    栈应用之 括号匹配问题(Python 版) 检查括号是否闭合 循序扫描被检查正文(一个字符)里的一个个字符 检查中跳过无关字符(所有非括号字符都与当前处理无关) 遇到开括号将其压入栈 遇到闭括号时弹出 ...

最新文章

  1. C++ #if、#elif、#else和#endif指令 的使用
  2. 2021年浙软夏令营预推免面经
  3. 老生常谈,joomla wordpress drupal,你该选择哪个CMS?
  4. 南京大学计算机学院宋教授,宋曰钦教授
  5. Linux中的火墙策略优化(iptables,firewalld)
  6. 缓存服务器协议有哪些,HTTP 协议的缓存机制概述
  7. python旅游推荐系统_如何用Python搭建一个简单的推荐系统?
  8. 排序算法之——选择排序
  9. SVN本地代码未提交而被覆盖
  10. 虚机中访问外网;NAT中的POSTROUTING是怎么搞的?
  11. vivado dds IP核笔记
  12. espresso java_java – Espresso单击菜单项
  13. 14、任务十四——数组对象的处理、修改DOM中的内容
  14. 全球与中国引文管理软件市场深度研究分析报告
  15. Sublime Text 比较2个文件不同
  16. sql语句查询存储过程
  17. 大数据安全国内外技术发展现状与趋势现状
  18. 自定义ImageView加载圆形图片
  19. 用python画圣诞树的代码
  20. 辟谣!微信支付宝收款码将不能用于经营性收款?

热门文章

  1. 13. GameProjec1_GameEngine
  2. Linux命令:more
  3. 【C语言】在终端输入多行信息,找出包含“ould”的行,并打印改行。
  4. sql limit offset 的用法 但在SqlServer中用不了
  5. 程序员的自我修养 - 符号修饰 函数签名 以及一个引申的问题: extern c
  6. 电商数据之战背后利益纠葛:触动最敏感神经
  7. 第7.3节 Python特色的面向对象设计:协议、多态及鸭子类型
  8. arrive 和reach 的区别
  9. bzoj1835基站选址(dp+线段树)
  10. 000 初步使用Kotlin开发Android应用