算法创作|栈的应用——括号匹配问题解决方法
本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。
问题描述
假设我们有一个复杂的字符串,里边包含了多种括号的嵌套,如下图:
这时候人为地用肉眼去判断其中的括号是否匹配是一件非常麻烦的事,不仅耗时耗力,而且准确率极低。那么,有什么方法可以帮助我们高效地进行判断呢,根据栈的特点,我们可以很容易地想到利用python中的list来模拟栈结构进行判断。
示例:
输入:((ABCD(x)
输出:False
输入:{[(rttyy)]sss}
输出:True
解决方案
我们用栈来保存未匹配的左括号,利用for循环从左到右依次遍历字符串的每个元素。当遍历到左括号时,则将其压入栈中;当遍历到右括号时,从栈顶取出一个左括号。如果能够匹配,则继续遍历剩下的字符串。如果遍历的过程中,遇到不能配对的右括号,或者栈中没有数据,则说明该字符串的括号匹配有误,直接返回False。当所有的括号都扫描完成之后,如果栈为空则说明该字符串的括号全部匹配正确,返回True;如果栈不为空,说明有未匹配的左括号,则返回False。
# coding:utf-8 def BracketMatch(str): #把左括号与右括号分别放在一组 LeftBrackets = '{[(' RightBrackets = '}])' #根据括号的匹配关系建立一个字典,右括号当key,左括号当value Brackets = {'}':'{',']':'[',')':'('} # 建立一个栈,初始值为空列表 Stack = [ ] for char in (str): if char in LeftBrackets: Stack.append(char) if char in RightBrackets: if Stack == [ ]: return False else: if Brackets[char] == Stack[-1]: Stack.pop() else: return False if Stack == [ ]: return True else: return False str = input('请输入字符:') print(BracketMatch(str)) |
运行结果如下图:
结语
此题难度一般,最关键的是要理解栈结构的特点,就是后进先出,了解了栈的特点后再运用遍历和嵌套判断便可解决这个问题。当然,这只是其中一种解决办法,我们只有通过不断地学习才能写出更优的算法和代码。
实习编辑:王晓姣
作者:唐雷清,祝菱晞,刘紫轩
稿件来源:深度学习与文旅应用实验室(DLETA)
算法创作|栈的应用——括号匹配问题解决方法相关推荐
- 栈的应用--括号匹配的检验
算法中设置一个栈,每次读入一个括号,若是右括号,则或者与置于栈顶的括号匹配,或者是不合法的情况,若是左括号,则入栈.若算法结束,栈是空的,则括号合法. 括号匹配函数 Status bracket_ma ...
- 栈应用之括号匹配(C语言)
{ ( hey! )[不管是电子表还是劳力士,他们的指针都是一样转动的.] } ) 宁是否发现了不舒服的地方,oh这种事是无法让强迫症忍受的,没错,这里的括号是不匹配的,就像C语言中,如果你输入的括号 ...
- 栈应用之 括号匹配问题(Python 版)
栈应用之 括号匹配问题(Python 版) 检查括号是否闭合 循序扫描被检查正文(一个字符)里的一个个字符 检查中跳过无关字符(所有非括号字符都与当前处理无关) 遇到开括号将其压入栈 遇到闭括号时弹出 ...
- 数据结构实验之栈四:括号匹配
数据结构实验之栈四:括号匹配 Description 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配. Inp ...
- sdut 数据结构实验之栈四:括号匹配
数据结构实验之栈四:括号匹配 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Description ...
- c语言栈训练题目:括号匹配
c语言栈训练题目:括号匹配 基本思路: 当前字符不是括号,不做处理: 当前字符是左括号,则进栈: 当前字符是右括号:若栈空,则表明该"右括号"多余,不匹 配,结束:否则和栈顶元素比 ...
- 栈的应用 括号匹配 c++
在算术表达式中,除了加.减.乘.除等运算外,往往还有括号.包括有大括号{},中括号[],小括号(),尖括号<>等. 对于每一对括号,必须先左边括号,然后右边括号:如果有多个括号,则每种类型 ...
- JAVA栈应用之括号匹配
JAVA栈应用之括号匹配 在数据处理中,常常要判断数据中的括号,应用栈来处理及其方便. 当用户输入一个字符串时,遇到左括号时,将其入栈,如'(' '["'{,而遇到右括号时,如')" ...
- c语言一串字符括号配对,C语言实现括号匹配的方法
1 要求 编写程序检查该字符串的括号是否成对出现,而且不能交叉出现. 输入: 一个字符串,里边可能包含"()"."{}"."[]"三种括号, ...
- 栈的应用-括号匹配的检验
1.算法描述 在括号匹配算法中定义int flag = 1变量来标记匹配结果是成功还是失败! 利用数据结构栈,从左到右依次扫描字符串:若是遇到左括号入栈:若是遇到右括号:若栈非空,使用Pop(s,to ...
最新文章
- 32岁前平凡无奇,鼓动同事创业,最终逆袭成硅谷首富
- 【教程】Linux DNS 服务器安装、配置及维护
- php表格单元格怎么实现排序,javascript实现对表格元素进行排序操作
- JavaScript高级之正则表达式
- CoreAnimation编程指南(九)图层布局
- java第二章_JAVA第二章知识点
- html5文字收起,科技常识:HTML5给汉字加拼音收起展开组件的实现代码
- 【大数据部落】混合IBCF协同过滤推荐算法推荐引擎的探索1
- 什么是软件测试?进行软件测试的目的是什么?
- java pdf转图片
- oracle dba 培训教程
- 学习笔记-echarts自定义背景图片
- 认证 (authentication) 和授权 (authorization) 的区别.md
- 从事网络安全,可以考取什么证书?
- 打码进行中-JavaScript高级程序设计-第1章-什么是javaScript
- windows_server_2008镜像文件
- 【练习题】python集合练习
- U9 ERP 系统BOM物料清单批量导入导出并新增修改功能
- 黑龙江科技大学计算机分数,2017黑龙江科技大学录取分数线
- 金融业信贷风控算法5-时间序列模型概述