Python实现求解括号匹配问题的方法


Posted in Python onApril 17, 2018

本文实例讲述了Python实现求解括号匹配问题的方法。分享给大家供大家参考,具体如下:

这个在本科学习数据结构的时候已经接触很多了,主流的思想是借助栈的压入、弹出来进行匹配,至于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 False
 elif length%2!=0:
  return False
 elif len(set_list)%2!=0:
  return False
 else:
  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 False
     break
 return True
if __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)

结果如下:

Python实现求解括号匹配问题的方法

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python不带重复的全排列代码
Aug 13 Python
零基础写python爬虫之HTTP异常处理
Nov 05 Python
Python最长公共子串算法实例
Mar 07 Python
深入解析Python中的变量和赋值运算符
Oct 12 Python
Python中的Descriptor描述符学习教程
Jun 02 Python
python导入时小括号大作用
Jan 10 Python
Python编程判断这天是这一年第几天的方法示例
Apr 18 Python
python实现字符串加密成纯数字
Mar 19 Python
pycharm配置git(图文教程)
Aug 16 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
Dec 04 Python
Python+unittest+DDT实现数据驱动测试
Nov 30 Python
python3读取文件指定行的三种方法
May 24 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
Apr 17 #Python
对numpy中array和asarray的区别详解
Apr 17 #Python
django 开发忘记密码通过邮箱找回功能示例
Apr 17 #Python
Python实现购物车程序
Apr 16 #Python
神经网络(BP)算法Python实现及应用
Apr 16 #Python
python读取视频流提取视频帧的两种方法
Oct 22 #Python
python读取和保存视频文件
Apr 16 #Python
You might like
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
基于Discuz security.inc.php代码的深入分析
2013/06/03 PHP
php使用curl存储cookie的示例
2014/03/31 PHP
两种php实现图片上传的方法
2016/01/22 PHP
PHP中类的自动加载的方法
2017/03/17 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
HR vs CL BO3 第二场 2.13
2021/03/10 DOTA
摘自百度的图片轮换效果代码
2007/11/19 Javascript
Extjs EditorGridPanel中ComboBox列的显示问题
2011/07/04 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
2015/10/26 Javascript
jquery遍历标签中自定义的属性方法
2016/09/17 Javascript
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
python requests 使用快速入门
2017/08/31 Python
python中pytest收集用例规则与运行指定用例详解
2019/06/27 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
python3处理word文档实例分析
2020/12/01 Python
墨西哥网上超市:Superama
2018/07/10 全球购物
PyQt 如何创建自定义QWidget
2021/03/24 Python
儿科护理实习自我鉴定
2013/09/19 职场文书
涉外文秘个人求职的自我评价
2013/10/07 职场文书
研究生自荐信
2013/10/09 职场文书
私人房屋买卖协议书
2014/10/04 职场文书
2014年派出所工作总结
2014/11/21 职场文书
高三语文复习计划
2015/01/19 职场文书
道德与公民自我评价
2015/03/09 职场文书
行政介绍信范文
2015/05/04 职场文书
当幸福来敲门英文观后感
2015/06/01 职场文书
react 项目中引入图片的几种方式
2021/06/02 Javascript
Nginx反向代理、重定向
2022/04/13 Servers