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的Django框架中URLconf相关的一些技巧整理
Jul 18 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
Oct 13 Python
Python subprocess模块详细解读
Jan 29 Python
Django中Model的使用方法教程
Mar 07 Python
python中强大的format函数实例详解
Dec 05 Python
对python requests发送json格式数据的实例详解
Dec 19 Python
python使用PIL实现多张图片垂直合并
Jan 15 Python
Python3.7安装keras和TensorFlow的教程图解
Jun 18 Python
opencv3/C++实现视频读取、视频写入
Dec 11 Python
查看端口并杀进程python脚本代码
Dec 17 Python
TensorFlow tf.nn.conv2d实现卷积的方式
Jan 03 Python
python:目标检测模型预测准确度计算方式(基于IoU)
Jan 18 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
str_replace只替换一次字符串的方法
2013/04/09 PHP
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
2015/01/30 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
javascript实现阻止iOS APP中的链接打开Safari浏览器
2014/06/12 Javascript
JavaScript中return false的用法
2015/03/12 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
2016/01/14 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
2016/05/10 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
JavaScript 数组的进化与性能分析
2017/09/18 Javascript
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
Vue中jsx不完全应用指南小结
2019/11/01 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
[56:01]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 Effect vs EG
2018/03/31 DOTA
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
python Tcp协议发送和接收信息的例子
2019/07/22 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
写一个用矩形法求定积分的通用函数
2012/11/08 面试题
应届生学校辅导员求职信
2013/11/07 职场文书
求职简历自荐信
2014/06/18 职场文书
2014年政务公开工作总结
2014/12/09 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL