zoukankan      html  css  js  c++  java
  • 利用栈实现括号匹配(python语言)

    原理:

    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)))
  • 相关阅读:
    Codeforces Round #311 (Div. 2)
    hdu5441 并查集+克鲁斯卡尔算法
    hdu5439 二分
    hdu5422 最大表示法+KMP
    hdu3374 最大最小表示法 +kmp
    hdu2609最小表示法
    hdu4870 高斯消元
    关于并发编程是使用synchronized,lock?
    关于项目中遇到的问题-- trycatch 手动回滚事务
    关于项目中遇到的问题-- 请求接收的参数发生改变情况
  • 原文地址:https://www.cnblogs.com/pjcd-32718195/p/12387699.html
Copyright © 2011-2022 走看看