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 05 Python
Python 创建子进程模块subprocess详解
Apr 08 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
Apr 02 Python
python统计中文字符数量的两种方法
Jan 31 Python
Python3转换html到pdf的不同解决方案
Mar 11 Python
Python中的asyncio代码详解
Jun 10 Python
wxpython布局的实现方法
Nov 01 Python
python导入不同目录下的自定义模块过程解析
Nov 18 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
Sep 28 Python
基于Django快速集成Echarts代码示例
Dec 01 Python
python os.rename实例用法详解
Dec 06 Python
python 判断字符串当中是否包含字符(str.contain)
Jun 01 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
图书管理程序(一)
2006/10/09 PHP
php下关于中英数字混排的字符串分割问题
2010/04/06 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
2017/06/11 PHP
MooTools 1.2介绍
2009/09/14 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
React快速入门教程
2017/01/17 Javascript
Vue Ajax跨域请求实例详解
2017/06/20 Javascript
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
详解关于React-Router4.0跳转不置顶解决方案
2019/05/10 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
[02:27]《DAC最前线》之附加赛征程
2015/01/29 DOTA
[54:47]Liquid vs VP Supermajor决赛 BO 第五场 6.10
2018/07/05 DOTA
Python中asyncore的用法实例
2014/09/29 Python
python实现提取百度搜索结果的方法
2015/05/19 Python
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
python 中的divmod数字处理函数浅析
2017/10/17 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
python 堆和优先队列的使用详解
2019/03/05 Python
trivago美国:全球最大的酒店价格比较网站
2018/01/18 全球购物
爱普生美国官网:Epson美国
2018/11/05 全球购物
俄罗斯品牌服装和鞋子的在线商店:KUPIVIP
2019/10/27 全球购物
给朋友的道歉信
2014/01/09 职场文书
工作睡觉检讨书
2014/02/25 职场文书
财务情况说明书范文
2014/05/06 职场文书
学校学习雷锋活动总结
2014/07/03 职场文书
工作散漫检讨书
2014/09/16 职场文书
大学生个人年度总结范文
2015/02/15 职场文书
小学大队委竞选口号
2015/12/25 职场文书
全家福照片寄语怎么写?
2019/04/02 职场文书
基于flask实现五子棋小游戏
2021/05/25 Python