利用栈实现括号匹配(python语言)
原理:
- 右括号总是与最近的左括号匹配 --- 栈的后进先出
- 从左往右遍历字符串,遇到左括号就入栈,遇到右括号时,就出栈一个元素与其配对
- 当栈为空时,遇到右括号,则此右括号无与之匹配的左括号
- 当最终右括号匹配完毕后栈内还有剩余元素,则表明这些位置的左括号没有与之匹配的右括号
代码实现:
1 # 1、创建一个Stack的类
2 # 对栈进行初始化参数设计
3 class Stack(object):
4 def __init__(self,limit=10):
5 self.stack = [] # 存放元素
6 self.limit = limit # 栈容量极限
7
8 # 进栈
9 def push(self,data):
10 # 判断栈是否溢出
11 if len(self.stack) >= self.limit:
12 raise IndexError('超出栈容量极限')
13 self.stack.append(data)
14
15 # 退栈
16 def pop(self):
17 if self.stack:
18 return self.stack.pop()
19 else:
20 # 空栈不能被弹出元素
21 raise IndexError('pop from an empty stack')
22
23 def peek(self):
24 # 查看栈的栈顶元素(最上面的元素)
25 if self.stack:
26 return self.stack[-1]
27
28 # 判断栈是否为空
29 def is_empty(self):
30 return not bool(self.stack)
31
32 def size(self):
33 # 返回栈的大小
34 return len(self.stack)
35
36 # 括号匹配 parenthesis 圆括号 parentheses:parenthesis的复数
37 def balanced_parentheses(parentheses):
38 stack = Stack(len(parentheses))
39 for parenthesis in parentheses:
40 # 如果是左括号,则入栈
41 if parenthesis == '(':
42 stack.push(parenthesis)
43 elif parenthesis == ')':
44 # 当栈为空时,遇到右括号,则此右括号无与之匹配的左括号
45 if stack.is_empty():
46 return False
47 stack.pop()
48 # 栈为空,返回 True
49 # 栈不为空,返回 False
50 return stack.is_empty()
51
52 if __name__ == '__main__':
53 examples = ['((()))','((())','(()))']
54 for example in examples:
55 print(example + ':' + str(balanced_parentheses(example)))
利用栈实现括号匹配(python语言)的更多相关文章
- STL-stack和顺序栈实现括号匹配
2018-11-11-14:28:31 1.顺序栈 下面是我用数组实现的顺序栈,包含的函数有出入栈,查看栈顶元素,栈的大小,栈是否空等函数,当栈空间不够用时,对应的数组会自动增长. /******** ...
- HDU 4283 You Are the One ★(进出栈的括号匹配性质:区间DP)
题意 有一个队列,每个人有一个愤怒值D,如果他是第K个上场,不开心指数就为(K-1)*D.但是边上有一个小黑屋(一个FILO堆栈),可以一定程度上调整上场程序,求一种安排上场方案使得所有人的不开心指数 ...
- 利用顺序栈解决括号匹配问题(c++)-- 数据结构
题目: 7-1 括号匹配 (30 分) 给定一串字符,不超过100个字符,可能包括括号.数字.字母.标点符号.空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入格式: 输入在一行 ...
- C语言数据结构之栈:括号匹配
括号匹配这是个很简单的题目,如果只有小括号,就模拟进栈和出栈的过程就行了: 注:输入时'@'作为结束标志 #include <stdio.h> int main() { freopen(& ...
- Python面试题:使用栈处理括号匹配问题
括号匹配是栈应用的一个经典问题, 题目 判断一个文本中的括号是否闭合, 如: text = "({[({{abc}})][{1}]})2([]){({[]})}[]", 判断所有括 ...
- [Java]利用栈判断括号是否完整配对
利用栈实现判断字符串中的括号是否都是配对的. 主要算法是依次读取字符串中的每一个字符,如果是左括号则将左括号压入栈中,如果是右括号则从栈中弹出最上面的字符,若两者不是同种括号或栈内已经没有字符就返回f ...
- 《LeetBook》leetcode题解(20):Valid Parentheses[E]——栈解决括号匹配问题
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- P1739_表达式括号匹配(JAVA语言)
思路:刚开始想用stack,遇到'('就push,遇到')'就pop,后来发现其实我们只需要用到栈里'('的个数,所以我们用一个变量统计'('的个数就好啦~ 题目描述 假设一个表达式有英文字母(小写) ...
- Python 用栈判断括号匹配
#!/usr/bin/python # -*- coding: UTF-8 -*- from pythonds.basic.stack import Stack def parChecker(symb ...
随机推荐
- Vlookup大叔早已油腻(Excel函数集团)
1.Vlookup基础用法:https://mp.weixin.qq.com/s/0JRytWlBD-KYM2jkecG2rA 2.合并字符串:https://mp.weixin.qq.com/s/9 ...
- TensorFlow.NET机器学习入门【1】开发环境与类型简介
项目开发环境为Visual Studio 2019 + .Net 5 创建新项目后首先通过Nuget引入相关包: SciSharp.TensorFlow.Redist是Google提供的TensorF ...
- LuoguP7041 [NWRRC2016]King's Heir 题解
Content 给出现在的日期,请从 \(n\) 个人当中选出一个人,使得他是所有成年人(\(\geqslant 18\) 岁的人)中年龄最小的. 数据范围:设日期为 \(yy/mm/dd\),则有 ...
- P7990-[USACO21DEC]Closest Cow Wins S【堆,贪心】
正题 题目链接:https://www.luogu.com.cn/problem/P7990 题目大意 数轴上有\(k\)个点是草地,每个草地有不同收益,\(m\)个点是地方的点,现在你要放置\(n\ ...
- UDP&串口调试助手用法(1)
一览 UDP 串口 常用 功能概述 概览 支持UDP通信协议: 广播.单播.组播 支持串口通信 配置了常用的配置,常用的进制转化: 2进制,8进制,10进制,和16进制之间的转换 配置了 计算器,加减 ...
- win10使用cmake编译libevent(解决依赖openssl)
概述 win10没有安装openssl cmake version: 3.18 libevent version: 2.1.10-stable libevent目前的版本中写好了 CMakeLists ...
- 【LeetCode】166. Fraction to Recurring Decimal 解题报告(Python)
[LeetCode]166. Fraction to Recurring Decimal 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingz ...
- 深度学习中常见的 Normlization 及权重初始化相关知识(原理及公式推导)
Batch Normlization(BN) 为什么要进行 BN 防止深度神经网络,每一层得参数更新会导致上层的输入数据发生变化,通过层层叠加,高层的输入分布变化会十分剧烈,这就使得高层需要不断去重新 ...
- Java Web大作业——编程导航系统
title: Java Web大作业--编程导航系统 categories: - - 计算机科学 - Java abbrlink: 40bc48a1 date: 2021-12-29 00:37:35 ...
- 深入理解Java虚拟机二:垃圾收集与内存分配
垃圾收集:垃圾收集要完成三件事,包括哪些内存需要回收,什么时候回收及如何回收. 1.需要回收的内存判定:没有引用指向原先分配给某个对象的内存时,则该内存是需要回收的垃圾 Java垃圾收集器在对内存进行 ...