LeetCode20:有效的括号
原题地址:. - 力扣(LeetCode)
题目描述
给定一个只包括
'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([])"
输出:true
提示:
1 <= s.length <= 104s仅由括号'()[]{}'组成
解题思路
- 输入检查:首先检查输入字符串是否为空或长度为零。如果是,则返回
true,表示有效。- 长度检查:如果字符串的长度小于等于 1 或者是奇数,直接返回
false,因为无法匹配成对的括号。- 使用栈:创建一个栈来存放左括号。遍历字符串中的每个字符:
- 如果当前字符是左括号
(、[或{,将其压入栈中。- 如果当前字符是右括号
)、]或},则检查栈是否为空:
- 如果为空,说明没有左括号可以匹配,返回
false。- 如果不为空,弹出栈顶元素并检查它是否与当前右括号匹配。如果不匹配,返回
false。- 结束检查:遍历完成后,如果栈为空,说明所有的左括号都有对应的右括号,返回
true;否则返回false。
源码实现
class Solution {public boolean isValid(String s) {// 检查输入是否为空或长度为零if (s == null || s.length() == 0) {return true; // 空字符串被认为是有效的}// 检查长度是否小于等于1或为奇数if (s.length() <= 1 || s.length() % 2 != 0) {return false; // 不能成对匹配}// 创建一个栈来存放左括号Stack<Character> stack = new Stack<Character>();// 遍历字符串中的每个字符for (char c : s.toCharArray()) {// 如果是左括号,压入栈中if (c == '(' || c == '[' || c == '{') {stack.push(c);continue;}// 如果是右括号,检查栈是否为空if (stack.isEmpty()) {return false; // 没有对应的左括号}// 检查栈顶元素是否匹配if (c == ')' && stack.pop() != '(') {return false; // 不匹配} else if (c == ']' && stack.pop() != '[') {return false; // 不匹配} else if (c == '}' && stack.pop() != '{') {return false; // 不匹配}}// 如果栈为空,所有括号都匹配,返回true;否则返回falsereturn stack.isEmpty();}
}
复杂度分析
- 时间复杂度:O(n),其中 n 是字符串的长度。我们只需遍历字符串一次,栈的入栈和出栈操作的时间复杂度为 O(1)。
- 空间复杂度:O(n),在最坏的情况下,栈中可能会存放所有的左括号(例如字符串为 "((("),因此需要 O(n) 的空间。
相关文章:
LeetCode20:有效的括号
原题地址:. - 力扣(LeetCode) 题目描述 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合…...
简单介绍Class文件、Dex文件以及ELF文件
Class文件 Class文件是Java源代码文件经Java编译器编译后得到的Java字节码文件。对比Linux、Windows上的可执行文件而言,Class文件可以看作是Java虚拟机的可执行文件。 Dex文件 Dex文件是Android平台上与传统Class文件对应的Java字节码文件。Dex文件的核心内容与Cl…...
Vivo开奖了,劝退价。。
vivo 也开奖了,不过有小伙伴反馈是个劝退价,甚至不如隔壁的 oppo,要说这两家也是渊源颇深,一家是绿厂,一家是蓝厂,高管也都是早期步步高出来的。 给大家盘一下开奖的信息,方便大家横向做个对比&…...
鸿蒙打包hvigorw clean报错No npmrc file is matched in the current user folder解决
问题 在执行hvigorw clean等命令时,报错如下: Error: The hvigor depends on the npmrc file. No npmrc file is matched in the current user folder. Configure the npmrc file first解决方案 在用户当前目录下新建.npmrc文件,并配置如下…...
无人机救援系统基本组成
无人机救援系统基本组成 1. 源由2. 组成2.1 无人机载具2.1.1 多旋翼2.1.2 垂起固定翼2.1.3 智能避障2.1.4 物资投递 2.2 智能吊舱2.2.1 云台2.2.2 高清摄像2.2.3 红外热成像2.2.4 激光测距2.2.5 目标跟踪 2.3 通讯链路2.3.1 超长距离通信2.3.2 长距离通信2.3.3 中等距离通信 2.…...
git入门教程
git入门教程1:git简介git入门教程2:git发展历史git入门教程3:安装配置git入门教程4:git工作流程git入门教程5:git仓库操作git入门教程6:git基本版本控制git入门教程7:git与远程仓库的交互git入门…...
AMBA:AHB_Slave_Mux的解析与HREADY、HREADYOUT
相关阅读 AMBAhttps://blog.csdn.net/weixin_45791458/category_12800219.html?spm1001.2014.3001.5482 简介 从1999年的AMBA2发布以来,AHB协议中就存在数据选择器,如图1所示的AHB2协议的总线互连。 图1 AHB2的总线互连 这幅图画得比较粗糙࿰…...
初始Linux (2) : 权限
1. su [用户名]及权限概念 Linux中有两种用户:普通用户、超级用户 超级用户可以再 linux 系统下做任何事情,不受限制;而普通用户只能做有限的事情。 可以使用指令:su -快速进入root账户,但需要输入相关密码。 超级用…...
在Mac下安装时间序列软件Hector
1.软件介绍 Hector 是一款开源软件,专用于 GNSS 时间序列数据的处理与分析,广泛应用于地球科学研究。它帮助研究人员从 GNSS 数据中提取长期趋势、周期性成分,并建模噪声特性,用于地壳形变、地震影响和气候变化等方面的研究。Hec…...
JVM1.8内存模型
一、内存模型概览 本文介绍的是JDK1.8的内存模型。1.8同1.7相比,最大的差别就是元空间取代了永久代。元空间的本质和永久代类似,都是堆JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不存在虚拟机中,而是…...
windows C#-类型系统(上)
C# 是一种强类型语言。 每个变量和常量都有一个类型,每个求值的表达式也是如此。 每个方法声明都为每个输入参数和返回值指定名称、类型和种类(值、引用或输出)。 .NET 类库定义了内置数值类型和表示各种构造的复杂类型。 其中包括文件系统、网络连接、对象的集合和…...
【酷狗音乐】逆向登录参数分析
mid、uuid参数 从cookie里面取值kg_mid,没有就生成 dfid也是从cookie里面取的kg_dfid 清空cookie dfid "-"也是可以的 md5加密了一个随机uuid import uuid import hashlibuuid1 str(uuid.uuid4())def md5_encrypt(text):return hashlib.md5(text.enco…...
Jenkins面试整理-Jenkins Pipeline 是什么?
Jenkins Pipeline 是一种将 Jenkins 中的持续集成和持续交付(CI/CD)流程定义为代码的方式。Pipeline 提供了一种灵活、可维护的方式,通过脚本来描述构建、测试、部署等流程。Jenkins Pipeline 使用 Groovy 作为脚本语言,并可以通过 Jenkinsfile 来定义和管理流水线。 Jenki…...
RHCE第三次实验
要求 (1)学生信息网站只有song和tian两人可以访问,其他用户不能访问。 (2)访问缴费网站实现数据加密基于https访问。 架设一台NFS服务器,并按照以下要求配置 1、开放/nfs/shared目录,供所…...
基于LORA的一主多从监测系统_4G模块上巴法云
临时添加一个更新,更换云平台为巴法云,事情的起因是因为阿里云这个老六,早上睡了一觉起来发短信告诉我云平台给我停了,得交钱,好嘛,不过也没办法现在这基本都收费,当然还有onenet可以用…...
pip使用
pip全称pip install package,是python第三方包sitepackage管理的工具,安装,卸载第三方包。安装python时可以选择安装pip,或自己安装pip 查看pip是否安装:pip --version 安装pip :pip python -m pip install --upgrade…...
Django ORM详解:外键使用(外键逻辑关联)与查询优化
Django数据库迁移 # 创建迁移 python manage.py makemigrations your_app_name # 应用迁移 python manage.py migrate # 查看迁移状态 python manage.py showmigrations # 回滚迁移 python manage.py migrate your_app_name 0001 # 修改表后,删除迁移记录和表删除迁移记录后重…...
【Python】实战:使用input()从键盘获取一个字符串,判断这个字符串在列表中是否存在(函数体不能使用in),返回结果为True或False
使用input()从键盘获取一个字符串,判断这个字符串在列表中是否存在(函数体不能使用in),返回结果为True或False def exists_in_list(input_string, str_list):# 遍历列表中的每个元素for item in str_list:if item input_string: # 如果当前元素等于输…...
【YApi】接口管理平台
一、简介 YApi 是一个用于前后端开发团队协作的 API 管理平台,帮助团队更加高效地进行 API 接口的设计、测试、文档管理和版本控制等工作。 YApi 主要功能: API 设计和管理:提供 API 设计和文档生成工具,使开发者能够轻松创建、…...
QNAP威联通NAS忘记密码怎么办?
创作立场:原创不易,拒绝搬运~ hello 大家好,我是你们的老伙伴,稳重的大王~ 如题:在使用QNAP 威联通NAS期间,如果忘记密码,怎么去找回密码呢? 每台QNAP 威联通NAS,在机器…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
