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 Django做网页
Nov 04 Python
python安装教程 Pycharm安装详细教程
May 02 Python
Python如何快速上手? 快速掌握一门新语言的方法
Nov 14 Python
Python判断一个三位数是否为水仙花数的示例
Nov 13 Python
我喜欢你 抖音表白程序python版
Apr 07 Python
Python supervisor强大的进程管理工具的使用
Apr 24 Python
Python2和Python3中@abstractmethod使用方法
Feb 04 Python
在pycharm中创建django项目的示例代码
May 28 Python
Python基于httpx模块实现发送请求
Jul 07 Python
Matlab中plot基本用法的具体使用
Jul 17 Python
用 python 进行微信好友信息分析
Nov 28 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
Feb 24 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
2021年最新CPU天梯图
2021/03/04 数码科技
一些使用频率比较高的php函数
2008/10/03 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
PHP中常用的输出函数总结
2014/09/22 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
js 深拷贝函数
2008/12/04 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
JavaScript创建对象的写法
2013/08/29 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
jQuery+ajax中getJSON() 用法实例
2014/12/22 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
vue2项目使用sass的示例代码
2017/06/28 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
2020/08/03 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
Python基本语法经典教程
2016/03/11 Python
Python程序员面试题 你必须提前准备!
2018/01/16 Python
python实现最长公共子序列
2018/05/22 Python
Python类如何定义私有变量
2020/02/03 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
2020/09/28 Python
2013年大学生的自我鉴定
2013/10/24 职场文书
大学毕业感言
2014/01/10 职场文书
公益广告宣传方案
2014/02/28 职场文书
工程造价专业大学生职业规划范文
2014/03/09 职场文书
母婴行业实体、电商模式全面解析
2019/08/01 职场文书
python 中的@运算符使用
2021/05/26 Python
Java spring单点登录系统
2021/09/04 Java/Android