原理:

  1. 右括号总是与最近的左括号匹配 --- 栈的后进先出
  2. 从左往右遍历字符串,遇到左括号就入栈,遇到右括号时,就出栈一个元素与其配对
  3. 当栈为空时,遇到右括号,则此右括号无与之匹配的左括号
  4. 当最终右括号匹配完毕后栈内还有剩余元素,则表明这些位置的左括号没有与之匹配的右括号

代码实现:

 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语言)的更多相关文章

  1. STL-stack和顺序栈实现括号匹配

    2018-11-11-14:28:31 1.顺序栈 下面是我用数组实现的顺序栈,包含的函数有出入栈,查看栈顶元素,栈的大小,栈是否空等函数,当栈空间不够用时,对应的数组会自动增长. /******** ...

  2. HDU 4283 You Are the One ★(进出栈的括号匹配性质:区间DP)

    题意 有一个队列,每个人有一个愤怒值D,如果他是第K个上场,不开心指数就为(K-1)*D.但是边上有一个小黑屋(一个FILO堆栈),可以一定程度上调整上场程序,求一种安排上场方案使得所有人的不开心指数 ...

  3. 利用顺序栈解决括号匹配问题(c++)-- 数据结构

    题目: 7-1 括号匹配 (30 分)   给定一串字符,不超过100个字符,可能包括括号.数字.字母.标点符号.空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入格式: 输入在一行 ...

  4. C语言数据结构之栈:括号匹配

    括号匹配这是个很简单的题目,如果只有小括号,就模拟进栈和出栈的过程就行了: 注:输入时'@'作为结束标志 #include <stdio.h> int main() { freopen(& ...

  5. Python面试题:使用栈处理括号匹配问题

    括号匹配是栈应用的一个经典问题, 题目 判断一个文本中的括号是否闭合, 如: text = "({[({{abc}})][{1}]})2([]){({[]})}[]", 判断所有括 ...

  6. [Java]利用栈判断括号是否完整配对

    利用栈实现判断字符串中的括号是否都是配对的. 主要算法是依次读取字符串中的每一个字符,如果是左括号则将左括号压入栈中,如果是右括号则从栈中弹出最上面的字符,若两者不是同种括号或栈内已经没有字符就返回f ...

  7. 《LeetBook》leetcode题解(20):Valid Parentheses[E]——栈解决括号匹配问题

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  8. P1739_表达式括号匹配(JAVA语言)

    思路:刚开始想用stack,遇到'('就push,遇到')'就pop,后来发现其实我们只需要用到栈里'('的个数,所以我们用一个变量统计'('的个数就好啦~ 题目描述 假设一个表达式有英文字母(小写) ...

  9. Python 用栈判断括号匹配

    #!/usr/bin/python # -*- coding: UTF-8 -*- from pythonds.basic.stack import Stack def parChecker(symb ...

随机推荐

  1. springmvc整合redis

    1.引入依赖 2.在resources包下创建配置文件redis-context.xml 3.在spring-servlet文件引入redis配置文件

  2. CF108A Palindromic Times 题解

    Content 现在是 \(h\) 时 \(m\) 分,请求出在此之后(不包含此时)的第一个回文时间. 数据范围:\(0\leqslant h\leqslant 23,0\leqslant m\leq ...

  3. LuoguP7713 「EZEC-10」打分 题解

    Content 某个人去参加比赛,\(n\) 个评委分别给他打分 \(a_1,a_2,\dots,a_n\).这个人可以最多执行 \(m\) 次操作,每次操作将一个评委的分数加 \(1\).定义他的最 ...

  4. CF1443A Kids Seating 题解

    Content 有 \(t\) 组询问,每组询问给定一个数 \(n\),试构造出一个长度为 \(n\) 的数列 \(\{a_i\}_{i=1}^n\),使得: \(\forall i\in[1,n], ...

  5. java数据类型:集合存储元素类型限制<泛型> ;自定义类指定泛型<T> 以及限制用法;派生子类泛型<T> super(泛型内参数); 泛型通配符?以及?限制用法

    问题背景 Java 集合有个缺点,把一个对象"丢进"集合里之后,集合就会"忘记"这个对象的数据类型,当再次取出该对象时 该对象的编译类型就变Object类型(其 ...

  6. Nginxre quest_time 和upstream_response_time

    nginx优化之request_time 和upstream_response_time差别 https://www.cnblogs.com/dongruiha/p/7007801.html http ...

  7. CentOS7学习笔记(六) 用户权限管理

    用户.用户组与文件的关系 在了解权限管理之前先创建一些用户和用户组便于后续学习,在root用户下操作: # 创建两个用户组 [root@localhost data]# groupadd kaifa ...

  8. 复杂SQL案例:用户退款信息查询

    供参考: select t3.course_id 课程id, t3.user_id 用户ID, u.user_full_name 姓名, -- u.phone, concat(u.company,' ...

  9. Linux使用docker部署nacos

    官网地址:https://nacos.io/zh-cn/docs/quick-start-docker.html 先把sql文件导入到mysql中 我也放了基础的sql /* * Copyright ...

  10. Hibernate使用distinct返回不重复的数据,使用group by 进行分组

    //distinct使用 public List<String> distinctDutyDate() { String hql="select distinct(dutyDat ...