[ LeetCode ] 题刷刷(Python)-第20题:有效的括号

题目描述

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

1、左括号必须用相同类型的右括号闭合。
2、左括号必须以正确的顺序闭合。
3、每个右括号都有一个对应的相同类型的左括号。

示例

示例 1:

输入:s = "()"
输出:true
示例 2:

输入:s = "()[]{}"
输出:true
示例 3:

输入:s = "(]"
输出:false

解题

解法一: 栈辅助法

思路

利用栈数据结构的特点(后进先出,LIFO)来模拟括号的匹配过程,确保遇到的每一个右括号都能找到对应的左括号。

  1. 遍历字符串:从左到右逐个遍历字符串中的每一个字符。
  2. 使用栈存储左括号:每当遇到一个左括号(如 '(', '[', or `'{``)时,将其压入栈中。栈用于暂存未匹配的左括号。
  3. 检查右括号与栈顶左括号的匹配性:当遇到一个右括号(如 ')', ']', or '}')时,检查栈是否为空以及栈顶元素是否与当前右括号匹配。若栈非空且栈顶元素与当前右括号匹配,则弹出栈顶元素;否则,字符串无效,返回 False。
  4. 遍历结束后的判断:遍历完整个字符串后,若栈为空,说明所有左括号都已经找到对应的右括号,字符串有效,返回 True;否则,栈中仍有未匹配的左括号,字符串无效,返回 False。

算法复杂度

时间复杂度:O(n),其中 n 为字符串 s 的长度。

由于函数对字符串 s 中的每个字符均进行一次操作,因此,该函数的时间复杂度为 O(n),其中 n 为字符串 s 的长度。


空间复杂度:O(n),其中 n 为字符串 s 的长度。

函数使用了一个栈 stack 存储遍历过程中遇到的左括号。在最坏情况下,即字符串 s 中的所有括号都是有效配对的,栈中最多存储与字符串长度相等的左括号。

代码

class Solution:def isValid(self, s: str) -> bool:# 定义一个字典,用于映射左括号到对应的右括号opening_brackets = {'(': ')', '[': ']', '{': '}'}# 初始化一个空栈,用于存储遇到的左括号stack = []# 遍历输入字符串中的每一个字符for char in s:# 当前字符为左括号时,将其压入栈中if char in opening_brackets:stack.append(char)# 当前字符为右括号,且栈非空且栈顶元素与当前右括号匹配时,# 弹出栈顶元素(表示找到了一个有效的括号对)elif stack and char == opening_brackets[stack[-1]]:stack.pop()# 当前字符为右括号,但与栈顶左括号不匹配时,字符串无效,提前返回 Falseelse:return False# 遍历完整个字符串后,若栈为空,说明所有左括号都已经找到对应的右括号,字符串有效,返回 True# 若栈不为空,说明还有未匹配的左括号,字符串无效,返回 Falsereturn not stack

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/821961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker 环境变量设置实现方式

1、前言 docker在当前运用的越来广泛,很多应用或者很多中间软件都有很多docker镜像资源,运行docker run 启动镜像资源即可应用。但是很多应用或者中间件有很多配置参数。这些参数在运用过程怎么设置给docker 容器呢?下面介绍几种方式 2 、do…

输入两个链表,找出它们的第一个公共结点。当不存在公共节点时,返回空节点。

class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { ListNode *p1 headA; ListNode *p2 headB; while (p1 ! p2) { if(p1 ! NULL)//p1没有走到结尾 p1 p1->next;//p1指向下一…

无线网络安全之WiFi Pineapple初探

背景 WiFi Pineapple(大菠萝)是由国外无线安全审计公司Hak5开发并售卖的一款无线安全测试神器。集合了一些功能强大的模块,基本可以还原钓鱼攻击的全过程。在学习无线安全时也是一个不错的工具,本文主要讲WiFi Pineapple基础配置…

MongoDB聚合运算符:$regexFind

MongoDB聚合运算符:$regexFind $regexFind在聚合表达式中提供正则表达式(regex)模式匹配功能。如果找到匹配,则返回包含第一个匹配信息的文档。如果未找到匹配,则返回空值。 在MongoDB 4.2 之前,聚合管道…

Python中CSRF攻击是什么

CSRF(跨站请求伪造,Cross-Site Request Forgery)攻击是一种网络攻击方法,它迫使终端用户在当前已认证的Web应用中执行非授权的命令。攻击者利用用户的信任,诱导或通过其他方式使用户的浏览器产生对受信任站点的恶意请求…

【Python】如何在Ubuntu上设置Python脚本开机自启

你不知道我为什么狠下心 盘旋在你看不见的高空里 多的是 你不知道的事 蝴蝶眨几次眼睛 才学会飞行 夜空洒满了星星 但几颗会落地 我飞行 但你坠落之际 很靠近 还听见呼吸 对不起 我却没捉紧你 🎵 王力宏《你不知道的事》 前置要求 确保你的Ub…

和鲸科技将参与第五届空间数据智能学术会议并于应急减灾与可持续发展专题论坛做报告分享

ACM SIGSPATIAL中国分会致力于推动空间数据的研究范式及空间智能理论与技术在时空大数据、智慧城市、交通科学、社会治理等领域的创新与应用。ACM SIGSPATIAL中国分会创办了空间数据智能学术会议(SpatialDI),分会将于2024年4月25日-27日在南京…

javaWeb项目-快捷酒店管理系统功能介绍

项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、Spring Boot框架 …

PSCAD|应用于输电线路故障测距的行波波速仿真分析

1 主要内容 该程序参考文献《应用于输电线路故障测距的行波波速仿真分析》,利用线路内部故障产生的初始行波浪涌达线路两端测量点的绝对时间之差值计算故障点到两端测量点之间的距离,并利用小波变换得到初始行波波头准确到达时刻,从而精准定…

富文本在线编辑器 - tinymce

tinymce 项目是一个比较好的富文本编辑器. 这里有个小demo, 下载下来尝试一下, 需要配置个本地服务器才能够访问, 我这里使用的nginx, 下面是我的整个操作过程: git clone gitgitee.com:chick1993/layui-tinymce.git cd layui-tinymcewget http://nginx.org/download/nginx-1.…

JavaEE:JVM

基本介绍 JVM:Java虚拟机,用于解释执行Java字节码 jdk:Java开发工具包 jre:Java运行时环境 C语言将写入的程序直接编译成二进制的机器语言,而java不想重新编译,希望能直接执行。Java先通过javac把.java…

RK3568 学习笔记 : 更改 u-boot spl 中的 emmc 的启动次序

环境 开发板: 【正点原子】 的 RK3568 开发板 ATK-DLRK3568 u-boot 版本:来自 【正点原子】 的 RK3568 开发板 Linux SDK,单独复制出来一份,手动编译 编译环境:VMware 虚拟机 ubuntu 20.04 问题描述 RK3568 默认 …

浅谈线程的生命周期

Java线程的生命周期是一个从创建到终止的过程,经历了多种状态的转变。在Java中,线程的生命周期可以划分为以下几个主要状态: 新建(New): 当使用 new Thread() 创建一个新的线程对象但尚未调用 start() 方法…

CSS基础之伪元素选择器(如果想知道CSS的伪元素选择器知识点,那么只看这一篇就足够了!)

前言:我们已经知道了在CSS中,选择器有基本选择器、复合选择器、伪类选择器、那么选择器学习完了吗?显然是没有的,这篇文章讲解最后一种选择器——伪元素选择器。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我…

【linux】mobaterm如何kill pycharm进程

【linux】mobaterm如何kill pycharm进程 【先赞后看养成习惯】求点赞关注收藏😀 使用云服务器时,pycharm在打开状态下,不小心关了mobaxterm,然后再输入pycharm.sh就会打不开pycharm,显示已经打开报错:Com…

软考131-上午题-【软件工程】-软件可靠性、可用性、可维护性

可靠性、可用性和可维护性是软件的质量属性,软件工程中,用 0-1 之间的数来度量。 0.66 66% 1、 可靠性 可靠性是指一个系统对于给定的时间间隔内、在给定条件下无失效运作的概率。 可以用 MTTF/ (1MTTF) 来度量,其中 MTTF 为平均无故障时间…

Java单源最短路径知识点(含面试大厂题和源码)

单源最短路径问题是指在加权图中,找到从单个源点到其他所有点的最短路径的问题。这是图论和网络优化中的一个经典问题,具有广泛的应用,如网络路由、交通规划、社交网络分析等。解决单源最短路径问题的算法有很多,其中最著名的包括…

PHP一句话木马

一句话木马 PHP 的一句话木马是一种用于 Web 应用程序漏洞利用的代码片段。它通常是一小段 PHP 代码,能够在目标服务器上执行任意命令。一句话木马的工作原理是利用 Web 应用程序中的安全漏洞,将恶意代码注入到服务器端的 PHP 脚本中。一旦执行&#xf…

Java 分页查询

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

Docker Container (容器) 常见命令

Docker 容器的生命周期 什么是容器? 通俗地讲,容器是镜像的运行实体。镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容 器有初建、运行、停止、暂停和删除…