北大陈斌Python算法笔记(二)

简介: 北大陈斌Python算法笔记(二)

前言


🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。


栈的应用:简单括号匹配


首先说到括号,就是那种数学运算或者是逻辑运算中非常简单的括号


这玩意的使用呢,必须遵循某种规则,即“平衡”


说白了,就是括号必须得是一对,重点不在前面的“一”上,而是在“对”上

明白了吧,有开就有闭,有左就有右


那么我们应该如何构造括号匹配识别算法


首先遇到一串带有多个括号的代码,我们应先将无关的部分摘除掉,只留下括号,来分析逻辑


接下来我们从左到右来分析

最先遇到的是左侧第一个括号,那么它所对应的,是右侧最后一个括号,这也正好符合了我们之前说的

次序反转的识别,这正巧符合栈的特性


接下来呢,我们来看一道题

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
提示:
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成


直接分析代码


作者:shen-du-xue-xi-s

链接:https://leetcode.cn/problems/valid-parentheses/solution/by-shen-du-xue-xi-s-q3ul/

来源:力扣(LeetCode)

class Solution:
    def isValid(self, s: str) -> bool:
        #用字典来存储括号对,键是左括号,值是右括号
        dic = {   '(':')',    '[':']',   '{': '}'  }
        #构造辅助栈
        stack = []
        #开始遍历每一个括号,只将左括号入栈,当下一次入栈的是 栈顶元素相对应 的右括号时,把栈顶元素出栈;如果不是,则直接返回False
        for i in s:
            #如果是左括号,则入栈
            if i in dic:
                stack.append(i)
            #如果是右括号且栈不为空,判断栈顶元素(stack[-1])是否与当前要入栈的元素(i)相匹配
            elif stack:
                #如果匹配,把栈顶元素出栈
                if dic[ stack[-1] ] == i:
                    stack.pop()
                #如果不匹配,则直接返回False
                else:
                    return False
            #如果右括号且栈为空,肯定不匹配,直接返回False
            else:
                return False
        #如果最后栈中元素为空,说明为有效括号,返回True
        if len(stack) == 0:
            return True
        #否则返回False
        else:
            return False

来看下这串代码

def isValid(self, s: str) -> bool:

这个其实是python3的新特性,传入的形参为s,而“:”后面的str为注释


之所以叫做注释,是因为即使这玩意写的是str,还是能传入一个int进去且不报错(前提是代码内部能够正确处理,而后面的bool,则是对return返回值的注释

思路大体就是,在字符串中选择匹配的括号,先将左括号添加至栈顶,然后选择右括号


如果栈不空,则这一对括号成功匹配


如若在匹配到右括号时,栈为空,则说明这右括号是多余的,不符合平衡原则


如若在全部选择完之后发现栈不空,里面还有剩余的左括号,则说明这左括号是多余的,不符合平衡原则


当然,在HTML/XML这种层次结构化文档的校验,操作,也可以通过栈来实现


目录
相关文章
|
21天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
221 55
|
10天前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
102 66
|
1月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
160 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
14天前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
50 20
|
7天前
|
算法 网络协议 Python
探秘Win11共享文件夹之Python网络通信算法实现
本文探讨了Win11共享文件夹背后的网络通信算法,重点介绍基于TCP的文件传输机制,并提供Python代码示例。Win11共享文件夹利用SMB协议实现局域网内的文件共享,通过TCP协议确保文件传输的完整性和可靠性。服务器端监听客户端连接请求,接收文件请求并分块发送文件内容;客户端则连接服务器、接收数据并保存为本地文件。文中通过Python代码详细展示了这一过程,帮助读者理解并优化文件共享系统。
|
12天前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
43 5
|
12天前
|
存储 缓存 算法
探索企业文件管理软件:Python中的哈希表算法应用
企业文件管理软件依赖哈希表实现高效的数据管理和安全保障。哈希表通过键值映射,提供平均O(1)时间复杂度的快速访问,适用于海量文件处理。在Python中,字典类型基于哈希表实现,可用于管理文件元数据、缓存机制、版本控制及快速搜索等功能,极大提升工作效率和数据安全性。
46 0
|
3月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
95 3
|
6月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【7月更文挑战第22天】在大数据领域,Python算法效率至关重要。本文深入解析时间与空间复杂度,用大O表示法衡量执行时间和存储需求。通过冒泡排序(O(n^2)时间,O(1)空间)与快速排序(平均O(n log n)时间,O(log n)空间)实例,展示Python代码实现与复杂度分析。策略包括算法适配、分治法应用及空间换取时间优化。掌握这些,可提升大数据处理能力,持续学习实践是关键。
137 1
|
7月前
|
存储 机器学习/深度学习 算法
Python算法基础教程
Python算法基础教程
42 0