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)))
  • 相关阅读:
    在Xcode 查看预处理及预编译阶段“宏”Marcos
    复用的基础
    抖音品质建设
    Mach-O 文件格式
    isaclass object_getClass
    组件化接口依赖一致性问题
    objectClasses and metaclasses
    __attribute__详解及应用
    深入静态库 & 动态库--[iOS] 组件二进制化 & 库的各种小知识
    iOS应用的启动流程和优化详解
  • 原文地址:https://www.cnblogs.com/pjcd-32718195/p/12387699.html
Copyright © 2011-2022 走看看