news 2026/10/26 1:52:41

力扣热题100 20. 有效的括号

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣热题100 20. 有效的括号

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

有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

  • 示例 1:
  • 输入:s = “()”
  • 输出:true
  • 示例 2:
  • 输入:s = “()[]{}”
  • 输出:true
  • 示例 3:
  • 输入:s = “(]”
  • 输出:false
  • 示例 4:
  • 输入:s = “([])”
  • 输出:true

示例 5:

  • 输入:s = “([)]”
  • 输出:false

这个题目其实是一个阅读理解题,
示例 5:
输入:s = “([)]”
输出:false
这个 示例懂了就行了。
简言之:只要遇见右括号,然后和栈中栈顶数据比较,是一对就返回,不是则不对。即:当前右括号对应的左边 必须在栈顶。

public boolean isValid(String s){// 余1 一定是奇数,不成对,返回falseif(s.length()%2==1){returnfalse;}Map<Character, Character>pairs=new HashMap<Character, Character>();pairs.put(')','(');pairs.put(']','[');pairs.put('}','{');Deque<Character>stack=new ArrayDeque<>();for(int i=0;i<s.length();i++){char cur=s.charAt(i);// 如果是左括号,则不包含在pairs 的key 中,入栈。 // 如果是右括号,则包含在pairs 的key 中,判断栈是否为空,为空返回false,否则出栈,判断栈顶元素和当前字符是否匹配,不匹配返回false,匹配则继续循环。if(pairs.containsKey(cur)){if(!stack.isEmpty()){// 如果栈顶元素门和当前字符锁对应的门匹配,则出栈,否则返回false final Character pop=stack.pop();if(pop!=pairs.get(cur)){returnfalse;}}else{returnfalse;}}else{stack.push(cur);}}returnstack.isEmpty();}



为什么字典(Map)里要写成 ‘)’ → ‘(’,而不是 ‘(’ → ‘)’?
🌟 举个例子:“([)]”
看到(→ 开圆门 → 记在心里(入栈)
看到[→ 开方门 → 记在心里(入栈)
👉 现在心里记得:先开了圆门,再开了方门(方门是最新的!)
看到)→ 要关圆门了!
👉 小明立刻查记忆本:
“关)门,应该对应哪个开门动作?”
记忆本说:(
👉 但他心里记得最近开的是方门[!
👉[≠(→ ❌ 配不上!游戏失败!

🔑 关键:只有“关门”的时候才需要查“该配哪个开门动作”,所以字典必须以“关门动作”为 key!

❌ 如果反过来写(错误方式)
假如小明的记忆本写成:

开门动作对应的关门动作
()
[]

那会怎样?
当他看到((开门),他会想:“哦,以后要关)” —— 但这没用!
因为他不知道什么时候关,也不知道关的时候是否匹配。
当他看到)(关门),他查不到!因为字典里没有以)为 key 的记录。
👉 他就不知道该配哪个开门动作!
❌ 完全没法判断!

这个题目很容易理解为:只要字符串中存在对应的右括号(不要求顺序、不要求连续闭合),就算有效”
💡 新题其实变成了:检查每种括号的左、右出现次数是否相等。

🛠️ 解法思路(新题)
不需要栈!只需要计数器:
统计 ‘(’ 和 ‘)’ 的数量
统计 ‘{’ 和 ‘}’ 的数量
统计 ‘[’ 和 ‘]’ 的数量
如果每一对的数量都相等,就返回 true。

/** * 只要字符串中存在对应的右括号(不要求顺序、不要求连续闭合),就算有效 */ public boolean isValid2(String s){if(s.length()%2==1){returnfalse;}int round=0;int square=0;intcurly=0;for(int i=0;i<s.length();i++){char cur=s.charAt(i);if(cur=='(')round++;elseif(cur==')')round--;elseif(cur=='[')square++;elseif(cur==']')square--;elseif(cur=='{')curly++;elseif(cur=='}')curly--;}returnround==0&&square==0&&curly==0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/24 15:05:24

断网、断电,不断数据——LoongCollector 极限边缘场景可靠采集方案

作者&#xff1a;林润骑(太业) 背景 在云计算和物联网快速发展的今天&#xff0c;越来越多的业务场景将计算和数据采集能力推向了边缘侧。从智能制造的产线设备、新能源汽车的车载系统&#xff0c;到遍布各地的零售终端和智能家居设备&#xff0c;这些终端设备产生的可观测数据…

作者头像 李华
网站建设 2026/10/13 23:53:28

CSS 简介

CSS 简介 引言 层叠样式表(Cascading Style Sheets,简称CSS)是用于描述HTML或XML文档样式的样式表语言。它是一种用于网页设计的样式表语言,与HTML语言紧密相关,但独立于HTML。CSS能够将HTML文档的结构与表现分离,使得网页设计更加灵活和高效。 CSS 的起源与发展 CSS…

作者头像 李华
网站建设 2026/10/25 0:31:42

【Java开发】办公通讯软件端到端消息分发与提示技术深度解析

【精选优质专栏推荐】 《AI 技术前沿》 —— 紧跟 AI 最新趋势与应用《网络安全新手快速入门(附漏洞挖掘案例)》 —— 零基础安全入门必看《BurpSuite 入门教程(附实战图文)》 —— 渗透测试必备工具详解《网安渗透工具使用教程(全)》 —— 一站式工具手册《CTF 新手入门实战教…

作者头像 李华
网站建设 2026/10/21 8:34:56

基于深度学习YOLOv12的红细胞、白细胞和血小板检测系统(YOLOv12+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

一、项目介绍 本项目开发了一个基于YOLOv12深度学习算法的智能血细胞检测系统&#xff0c;能够自动识别和分类血液样本中的红细胞(RBC)、白细胞(WBC)和血小板(Platelets)。系统采用包含874张标注图像的专业数据集&#xff08;训练集765张、验证集73张、测试集36张&#xff09;…

作者头像 李华
网站建设 2026/10/21 21:35:26

基于深度学习YOLOv12的水下鱼类检测系统(YOLOv12+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

一、项目介绍 本项目基于YOLOv12深度学习框架开发了一套水下鱼类检测系统&#xff0c;专注于高效、准确地识别水下环境中的鱼类目标。系统采用轻量化的YOLOv12模型进行实时检测&#xff0c;并集成用户友好的UI界面&#xff0c;支持登录注册功能&#xff0c;便于多用户管理与数…

作者头像 李华
网站建设 2026/10/23 9:44:55

基于深度学习YOLOv11的条形码检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

一、项目介绍 本项目基于最新的YOLOv11深度学习算法&#xff0c;开发了一套高效、精准的条形码检测系统&#xff0c;结合用户友好的UI界面和完整的登录注册功能&#xff0c;适用于零售、物流、仓储等场景的自动化识别需求。系统采用YOLOv11作为核心检测模型&#xff0c;通过在Y…

作者头像 李华