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 相关文章推荐
Python3基础之基本数据类型概述
Aug 13 Python
利用一个简单的例子窥探CPython内核的运行机制
Mar 30 Python
浅谈Python数据类型之间的转换
Jun 08 Python
Python中super()函数简介及用法分享
Jul 11 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
对Python中内置异常层次结构详解
Oct 18 Python
在Django中URL正则表达式匹配的方法
Dec 20 Python
pyqt5使用按钮进行界面的跳转方法
Jun 19 Python
利用python实现PSO算法优化二元函数
Nov 13 Python
python 实现朴素贝叶斯算法的示例
Sep 30 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
Nov 24 Python
python pygame 开发五子棋双人对弈
May 02 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中的三元运算符使用说明
2011/07/03 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
PHP数组编码gbk与utf8互相转换的两种方法
2016/09/01 PHP
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
React中阻止事件冒泡的问题详析
2019/04/12 Javascript
对于防止按钮重复点击的尝试详解
2019/04/22 Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
2019/05/14 jQuery
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
基于pip install django失败时的解决方法
2018/06/12 Python
python中int与str互转方法
2018/07/02 Python
10款最好的Python开发编辑器
2019/07/03 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
django框架cookie和session用法实例详解
2019/12/10 Python
pytorch 实现删除tensor中的指定行列
2020/01/13 Python
在Tensorflow中查看权重的实现
2020/01/24 Python
详解Python IO编程
2020/07/24 Python
Python接口自动化测试的实现
2020/08/28 Python
CSS3弹性盒模型开发笔记(一)
2016/04/26 HTML / CSS
html5自带表单验证体验优化及提示气泡修改功能
2017/09/12 HTML / CSS
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
生物技术研究生自荐信
2013/11/12 职场文书
关于诚信的活动方案
2014/08/18 职场文书
意向协议书
2015/01/27 职场文书
护士先进个人总结
2015/02/13 职场文书
反邪教观后感
2015/06/11 职场文书
Pandas-DataFrame知识点汇总
2022/03/16 Python