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 20 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 Python
numpy使用技巧之数组过滤实例代码
Feb 03 Python
Python3.5常见内置方法参数用法实例详解
Apr 29 Python
Django中使用CORS实现跨域请求过程解析
Aug 05 Python
python socket 聊天室实例代码详解
Nov 14 Python
从pandas一个单元格的字符串中提取字符串方式
Dec 17 Python
Python小整数对象池和字符串intern实例解析
Mar 21 Python
解决c++调用python中文乱码问题
Jul 29 Python
用python写一个带有gui界面的密码生成器
Nov 06 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 Python
进行数据处理的6个 Python 代码块分享
Apr 06 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 批量更新网页内容实现代码
2010/01/05 PHP
PHP 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
javascript生成大小写字母
2015/07/03 Javascript
jQuery过滤HTML标签并高亮显示关键字的方法
2015/08/07 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
如何在Linux上安装Node.js
2016/04/01 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
浅谈Redux中间件的实践
2018/07/27 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
2019/09/25 Javascript
django限制匿名用户访问及重定向的方法实例
2018/02/07 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
Django中日期时间型字段进行年月日时分秒分组统计
2020/11/27 Python
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
公司员工的自我评价范例
2013/11/01 职场文书
工业自动化专业毕业生推荐信
2013/11/18 职场文书
党员培训思想汇报
2014/01/07 职场文书
幼儿园义卖活动方案
2014/01/17 职场文书
春季运动会广播稿大全
2014/02/19 职场文书
厂长岗位职责
2014/02/19 职场文书
班级道德讲堂实施方案
2014/02/24 职场文书
忠诚教育心得体会
2014/09/03 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
导游词之日月潭
2019/11/05 职场文书
apache基于端口创建虚拟主机的示例
2021/04/24 Servers
详解MySQL集群搭建
2021/05/26 MySQL