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中列表和元祖的使用方法
Apr 25 Python
python结合shell查询google关键词排名的实现代码
Feb 27 Python
Windows下python2.7.8安装图文教程
May 26 Python
简单谈谈python中的语句和语法
Aug 10 Python
Python扩展内置类型详解
Mar 26 Python
pandas中的DataFrame按指定顺序输出所有列的方法
Apr 10 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
python人民币小写转大写辅助工具
Jun 20 Python
python将控制台输出保存至文件的方法
Jan 07 Python
利用pyshp包给shapefile文件添加字段的实例
Dec 06 Python
Python3 webservice接口测试代码详解
Jun 23 Python
python实现批处理文件
Jul 28 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 isset()与empty()的使用区别详解
2010/08/29 PHP
延长phpmyadmin登录时间的方法
2011/02/06 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
2014/07/04 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
php集成动态口令认证
2016/07/21 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
2019/05/14 Javascript
vue在线动态切换主题色方案
2020/03/26 Javascript
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
Python编程把二叉树打印成多行代码
2018/01/04 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
在CMD命令行中运行python脚本的方法
2018/05/12 Python
python 异或加密字符串的实例
2018/10/14 Python
Python中turtle库的使用实例
2019/09/09 Python
Python timer定时器两种常用方法解析
2020/01/20 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
浅析Python 序列化与反序列化
2020/08/05 Python
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
C#的几个面试问题
2016/05/22 面试题
求职简历自荐信范文
2013/10/21 职场文书
劳资员岗位职责
2013/11/11 职场文书
2014端午节活动策划方案
2014/01/27 职场文书
团支书竞选演讲稿
2014/04/28 职场文书
个人工作总结范文2014
2014/11/07 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
子女赡养老人协议书
2016/03/23 职场文书