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时间戳与时间字符串互相转换实例代码
Nov 28 Python
Python、PyCharm安装及使用方法(Mac版)详解
Apr 28 Python
python机器学习之神经网络(三)
Dec 20 Python
python模块smtplib实现纯文本邮件发送功能
May 22 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
Mar 18 Python
python语言基本语句用法总结
Jun 11 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
Aug 21 Python
Python基于requests实现模拟上传文件
Apr 21 Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 Python
Matplotlib中%matplotlib inline如何使用
Jul 28 Python
python爬取2021猫眼票房字体加密实例
Feb 19 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
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
第十二节--类的自动加载
2006/11/16 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
Laravel向公共模板赋值方法总结
2019/06/25 PHP
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
2013/05/15 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
获取3个数组不重复的值的具体实现
2013/12/30 Javascript
jQuery的ready方法详解
2014/11/27 Javascript
jQuery中noconflict函数的实现原理分解
2015/02/03 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
js实现HashTable(哈希表)的实例分析
2016/11/21 Javascript
jQuery实现的页面详情展开收起功能示例
2018/06/11 jQuery
react-navigation之动态修改title的内容
2018/09/26 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
[02:31]《DAC最前线》之选手酒店现场花絮
2015/01/30 DOTA
深入理解Python中的*重复运算符
2017/10/28 Python
Python2.7.10以上pip更新及其他包的安装教程
2018/06/12 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
2019/01/05 Python
说说如何遍历Python列表的方法示例
2019/02/11 Python
利用Python检测URL状态
2019/07/31 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
python db类用法说明
2020/07/07 Python
全国优秀辅导员事迹材料
2014/05/14 职场文书
法律专业自荐信
2014/06/03 职场文书
建设工地安全标语
2014/06/07 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
新疆民族团结演讲稿
2014/08/27 职场文书
党校学习心得体会范文
2014/09/09 职场文书
四查四看整改措施
2014/09/19 职场文书
工作态度不端正检讨书
2014/10/04 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
调研报告的主要写法
2019/04/18 职场文书