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 14 Python
python字符类型的一些方法小结
May 16 Python
Python中的is和==比较两个对象的两种方法
Sep 06 Python
Django自定义过滤器定义与用法示例
Mar 22 Python
python 实现视频流下载保存MP4的方法
Jan 09 Python
Python实现计算字符串中出现次数最多的字符示例
Jan 21 Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 Python
如何用Python制作微信好友个性签名词云图
Jun 28 Python
python 操作hive pyhs2方式
Dec 21 Python
pytorch 中的重要模块化接口nn.Module的使用
Apr 02 Python
Python延迟绑定问题原理及解决方案
Aug 04 Python
Python数据分析入门之教你怎么搭建环境
May 13 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 set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
2014/10/30 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
PHP SPL标准库之接口(Interface)详解
2015/05/11 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
PHP+JQUERY操作JSON实例
2017/03/23 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
移动端横屏的JS代码(beta)
2016/05/16 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
js中let能否完全替代IIFE
2019/06/15 Javascript
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
python实现按行切分文本文件的方法
2016/04/18 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
python实现分页效果
2017/10/25 Python
python简单操作excle的方法
2018/09/12 Python
详解django自定义中间件处理
2018/11/21 Python
python中比较两个列表的实例方法
2019/07/04 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
Python __slots__的使用方法
2020/11/15 Python
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
英国足球店:UK Soccer Shop
2017/11/19 全球购物
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
英国领先的瓷砖专家:Walls and Floors
2018/04/27 全球购物
js正则匹配markdown里的图片标签的实现
2021/03/24 Javascript
异地年检委托书范本
2014/09/24 职场文书
语文教师求职信范文
2015/03/20 职场文书
小学四年级班务总结该怎么写?
2019/08/16 职场文书
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis