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实现在pickling的时候压缩的方法
Sep 25 Python
几个提升Python运行效率的方法之间的对比
Apr 03 Python
Python读取图片属性信息的实现方法
Sep 11 Python
Win7 64位下python3.6.5安装配置图文教程
Oct 27 Python
Python IDLE清空窗口的实例
Jun 25 Python
python实现汉诺塔算法
Mar 01 Python
Python标准库使用OrderedDict类的实例讲解
Feb 14 Python
python 实现矩阵按对角线打印
Nov 29 Python
Python PyPDF2模块安装使用解析
Jan 19 Python
Python基础之tkinter图形化界面学习
Apr 29 Python
利用Python第三方库实现预测NBA比赛结果
Jun 21 Python
python接口测试返回数据为字典取值方式
Feb 12 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
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
jquery 根据name名获取元素的value值
2015/02/27 Javascript
jquery仿百度百科底部浮动导航特效
2015/08/08 Javascript
Javascript操作表单实例讲解(下)
2016/06/20 Javascript
JavaScript中push(),join() 函数 实例详解
2016/09/06 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
vue+node+webpack环境搭建教程
2017/11/05 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
2018/04/01 Javascript
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
微信小程序实现自定义底部导航
2020/11/18 Javascript
python正则表达式抓取成语网站
2013/11/20 Python
Python中使用strip()方法删除字符串中空格的教程
2015/05/20 Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
2019/06/17 Python
Django后台admin的使用详解
2019/07/08 Python
Django xadmin开启搜索功能的实现
2019/11/15 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
美国宠物用品网站:Value Pet Supplies
2018/03/17 全球购物
Omio俄罗斯:一次搜索公共汽车、火车和飞机的机票
2018/11/17 全球购物
秋季红领巾广播稿
2014/01/27 职场文书
参观考察邀请函范文
2014/01/29 职场文书
小学生家长评语集锦
2014/01/30 职场文书
铲车司机岗位职责
2014/03/15 职场文书
可口可乐广告词
2014/03/20 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
医学生求职信
2014/07/01 职场文书
2014年统计工作总结
2014/11/21 职场文书
2014年党员发展工作总结
2014/12/02 职场文书
2019年大学生暑期社会实践调查报告模板
2019/11/07 职场文书
Python一行代码实现自动发邮件功能
2021/05/30 Python