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实现多线程的方式及多条命令并发执行
Jun 07 Python
python中类变量与成员变量的使用注意点总结
Apr 29 Python
Python模拟用户登录验证
Sep 11 Python
python实现外卖信息管理系统
Jan 11 Python
TensorFlow实现卷积神经网络CNN
Mar 09 Python
Python 实现使用dict 创建二维数据、DataFrame
Apr 13 Python
python并发和异步编程实例
Nov 15 Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 Python
scrapy-redis源码分析之发送POST请求详解
May 15 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
Aug 02 Python
使用Python将Exception异常错误堆栈信息写入日志文件
Apr 08 Python
python+requests接口压力测试500次,查看响应时间的实例
Apr 30 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 采集程序中常用的函数
2009/12/09 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
jQuery如何使用自动触发事件trigger
2015/11/29 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
2016/05/25 Javascript
好好了解一下Cookie(强烈推荐)
2016/06/14 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
JavaScript常用数组操作方法,包含ES6方法
2020/05/10 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
2019/05/23 jQuery
node删除、复制文件或文件夹示例代码
2019/08/13 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
[01:21]DOTA2新纪元-7.0新版本即将开启!
2016/12/11 DOTA
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
Python open()文件处理使用介绍
2014/11/30 Python
Python的装饰器用法学习笔记
2016/06/24 Python
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
python去掉空白行的多种实现代码
2018/03/19 Python
使用numpy和PIL进行简单的图像处理方法
2018/07/02 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
python基于pdfminer库提取pdf文字代码实例
2019/08/15 Python
Django stark组件使用及原理详解
2019/08/22 Python
基于Python中isfile函数和isdir函数使用详解
2019/11/29 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
python实现AHP算法的方法实例(层次分析法)
2020/09/09 Python
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
妇联领导班子剖析材料
2014/08/21 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL
浅谈Python数学建模之整数规划
2021/06/23 Python
Nginx+Tomcat负载均衡集群的实现示例
2021/10/24 Servers
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
2022/04/30 Vue.js