首页 > 编程语言 >【python数据结构4】基于栈结构的简单括号匹配

【python数据结构4】基于栈结构的简单括号匹配

时间:2024-05-29 20:03:06浏览次数:26  
标签:index 匹配 开始符号 符号 python 括号 balanced 数据结构

我们现在把注意力转向使用栈解决真正的计算机问题。你会这么写算术表达式

(5+6)*(7+8)/(4+3)

其中括号用于命令操作的执行。你可能也有一些语言的经验,如 Lisp 的构造

(defun square(n)
     (* n n))

这段代码定义了一个名为 square 的函数,它将返回参数的 n 的平方。 Lisp 使用大量的圆括号是臭名昭著的。

在这两个例子中,括号必须以匹配的方式出现。括号匹配意味着每个开始符号具有相应的结束符号,并且括号能被正确嵌套。考虑下面正确匹配的括号字符串:

(()()()())

(((())))

(()((())()))

对比那些不匹配的括号:

((((((())

()))

(()()(()

区分括号是否匹配的能力是识别很多编程语言结构的重要部分。具有挑战的是如何编写一个算法,能够从左到右读取一串符号,并决定符号是否平衡。为了解决这个问题,我们需要做一个重要的观察。从左到右处理符号时,最近开始符号必须与下一个关闭符号相匹配(见 Figure 4)。此外,处理的第一个开始符号必须等待直到其匹配最后一个符号。结束符号以相反的顺序匹配开始符号。他们从内到外匹配。这是一个可以用栈解决问题的线索。

请添加图片描述

Figure 4

一旦你认为栈是保存括号的恰当的数据结构,算法是很直接的。从空栈开始,从左到右处理括号字符串。如果一个符号是一个开始符号,将其作为一个信号,对应的结束符号稍后会出现。另一方面,如果符号是结束符号,弹出栈,只要弹出栈的开始符号可以匹配每个结束符号,则括号保持匹配状态。如果任何时候栈上没有出现符合开始符号的结束符号,则字符串不匹配。最后,当所有符号都被处理后,栈应该是空的。实现此算法的 Python 代码见 ActiveCode 1。

from pythonds.basic.stack import Stack

def parChecker(symbolString):
    s = Stack()
    balanced = True
    index = 0
    while index < len(symbolString) and balanced:
        symbol = symbolString[index]
        if symbol == "(":
            s.push(symbol)
        else:
            if s.isEmpty():
                balanced = False
            else:
                s.pop()

        index = index + 1

    if balanced and s.isEmpty():
        return True
    else:
        return False

print(parChecker('((()))'))
print(parChecker('(()'))

标签:index,匹配,开始符号,符号,python,括号,balanced,数据结构
From: https://blog.csdn.net/weixin_41496173/article/details/139234567

相关文章

  • 基于Python与水星二代摄像头的二次开发
    第一章Videocapture的正确使用大家好!关于摄像头的基本调用,相信大家以及初步学会了。我们买来这个摄像头,本来就是想着自己使用,进行二次开发的。但是大家根据OpenCV的调用函数Videocapture(),发现根本无法调用,这是为什么?首先,判断外接摄像头能否调用,我们有两个非常简单的方法:方......
  • 【Python Cookbook】S01E03 找到最大最小的N个元素
    目录问题解决方案讨论问题如何在一个集合中找到最大或最小的N个元素?解决方案使用heapq模块。pipinstallheapqheapq模块中,有nlargest()以及nsmallest()两个函数:importheapqnums=[1,8,23,2,7,-4,8,18,42,37]print(heapq.nlargest(3,n......
  • python处理EXCEL
    python处理EXCEL在Python中,有多个库可以用来操作Excel文件。其中比较常用的有openpyxl,pandas,xlsxwriter以及xlwings。下面我将分别介绍这些库及其使用方法。一、openpyxl安装pipinstallopenpyxl示例代码fromopenpyxlimportWorkbook,load_workbookfromopenp......
  • Python正则表达式
    语法关于正则表达式的相关知识,大家可以阅读一篇非常有名的博客叫《正则表达式30分钟入门教程》,读完这篇文章后你就可以看懂下面的表格,这是我们对正则表达式中的一些基本符号进行的扼要总结。符号解释示例说明.匹配任意字符b.t可以匹配bat/but/b#t/b1t等\w匹配字母/......
  • python之生成xmind
    今天为啥要说这个呢,因为前几天做接口测试,还要写测试用例,我觉得麻烦,所以我就用了python里面xmind的插件。自动生成了测试用例,数据来源是json。......
  • ChatGPT学习Python系列之Python装饰器
    ChatGPT学习Python系列之Python装饰器网上查询Python装饰器相关资料,质量层次不齐,通过问答形式利用ChatGPT3.5学习了Python装饰器相关的概念及示例,GPT给出的解答和示例代码质量非常高,总结如下。1.什么是python装饰器Python的装饰器是一种功能强大的语法,允许在不修改原始函数代......
  • python处理EXCEL
    !https://zhuanlan.zhihu.com/p/700537143python处理EXCEL在Python中,有多个库可以用来操作Excel文件。其中比较常用的有openpyxl、pandas,以及xlsxwriter。下面我将分别介绍这些库及其使用方法。一、openpyxl安装pipinstallopenpyxl示例代码fromopenpyxlimportWorkbo......
  • Python lambda函数
    Pythonlambda函数Python中的lambda函数,用于创建简洁的匿名函数。Lambda函数通常用于在需要函数作为参数的上下文中,以及在需要临时定义简单函数的地方。下面是一些关于lambda函数的基本知识和用法:1.lambda函数的基本语法lambdaarguments:expressionlambda关键字用于声明......
  • 用Python写一个热点事件追踪的算法
     要编写一个热点事件追踪的算法,首先需要明确算法的主要目标和所需的数据。在这个例子中,我们将基于微博的热度(如点赞数、转发数和评论数)来追踪热点事件。以下是一个简单的Python算法,仅供参考: 1.导入所需库 ```pythonimportrequestsfrombs4importBeautifulSoupimp......
  • Python截取函数
    在Python中,你可以使用切片(slice)来截取字符串、列表和其他序列类型的一部分。以下是一些常见的示例:1.**截取字符串**:```pythons="Hello,World!"substring=s[7:12] #从索引7开始到索引12(不包括12)结束print(substring) #输出:World```2.**使用负数索引截取**......