「力扣」20. 有效的括号

【忍者算法】探秘括号匹配:从生活场景理解栈的妙用!|LeetCode 20「有效的括号」 文章探讨了如何使用栈数据结构解决LeetCode 20题「有效的括号」问题。作者通过生活场景引入,解释了栈在处理括号匹配时的自然适用性。文章详细解析了问题的要求,并提供了从初学者思路到优化思路的逐步发展过程。最终,作者给出了一个优雅的Java解决方案,并深入讲解了代码的每个环节,包括前置优化、栈的使用、匹配过程和验证逻辑。此外,文章还指出了常见的易错点,并提供了面试技巧和高级优化建议。通过这篇文章,读者不仅学会了解决括号匹配问题,还理解了栈在处理配对问题中的重要性。 阅读详情

「力扣」20. 有效的括号

题目描述

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

有效字符串需满足:

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

示例 1:

输入: s = "()"
输出: true

示例 2:

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

示例 3:

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

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

题解

解法1

该题是典型的使用栈来解决的算法题,具体如何解决呢?我们以如下例子说明,字符串是{[()]}肯定是有效的括号,从左到右依次循环,如果字符是左括号((、{、[)则直接压入栈(因为后面可能会有匹配的右括号),如果是右括号()、}、]), 则用与之匹配的左括号与栈顶元素进行比较(此时不能弹栈!!!),如果相等则弹栈(弹栈是为了后续字符与栈顶元素比较),如果栈是空的,或者当前元素与栈顶元素不相等,则直接返回false。

代码如下:

class Solution {
    public boolean isValid(String s) {
        if (s.length() % 2 == 1) {
            return false;
        }
        // 定义一个栈帧
        Deque<Character> stack = new LinkedList<>();
        // 循环
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            // 如果是左侧括号(、[、{,那么就将其放入栈中。
            if (c == '(' || c == '[' || c == '{') {
                stack.push(c);
            } else {
                char o = 0;
                if (c == ')') {
                    o = '(';
                }
                if (c == ']') {
                    o = '[';
                }
                if (c == '}') {
                    o = '{';
                }
                if (stack.isEmpty() || o != stack.peek()) {
                    return false;
                }
                stack.pop();
            }

        }
        return stack.isEmpty();
    }
}

提交结果:

image.png

时间击败98.58%的java用户,空间击败了52.14%的java用户。
时间复杂度是O(n),空间复杂度是O(n)。


看了下官方题解,我与官方思想基本一致,只不过官方通过hashmap,存储右括号与左括号的匹配关系。

class Solution {
    public boolean isValid(String s) {
        int n = s.length();
        if (n % 2 == 1) {
            return false;
        }

        Map<Character, Character> pairs = new HashMap<Character, Character>() {{
            put(')', '(');
            put(']', '[');
            put('}', '{');
        }};
        Deque<Character> stack = new LinkedList<Character>();
        for (int i = 0; i < n; i++) {
            char ch = s.charAt(i);
            if (pairs.containsKey(ch)) {
                if (stack.isEmpty() || stack.peek() != pairs.get(ch)) {
                    return false;
                }
                stack.pop();
            } else {
                stack.push(ch);
            }
        }
        return stack.isEmpty();
    }
}

运行结果如下:

image.png

效率不如我上面的代码,但是代码更少,更简洁写。

晶圆测试(wafer sort)全流程解析:从探针卡到良率统计的实战指南 本文详细解析了晶圆测试(wafer sort)的全流程,从探针卡选型到良率统计的实战指南。涵盖了12英寸先进制程产线的关键技术,包括探针卡系统、测试程序开发、产线自动化集成及数据分析,特别聚焦多站点并行测试的时序优化和接触阻抗异常排查,帮助工程师提升测试效率与准确性。 阅读详情

相关推荐

vivado Block Design 设计 .tcl 文件使用,导出,修改,添加方式

在vivado中生成 Block Design可以导出tcl文件进行保存(体积小),或者在别的版本vivado中打开(版本互通),这是一个非常好的功能。另外GitHub中很多项目都是采用这种方式上传的,学会如何使用可以快速修改历程项目。

2203_75345038的博客 2493

【每日一题】力扣20|有效的括号

【代码】【每日一题】力扣20|有效的括号。

qq_46622590的博客 169

python批量生成CAD图纸

python批量生成CAD图纸

轩逸云的博客 1万+

LeetCode力扣刷题笔记

栈,字符串

ganwanshuijiao 417

从S参数矩阵到硬件实现:手把手教你用耦合微带线设计Marchand巴伦

本文详细介绍了使用耦合微带线设计Marchand巴伦的完整流程。从奇偶模理论和S参数矩阵分析入手,结合ADS仿真软件进行参数优化与电磁仿真验证,最终指导PCB布局、制作与实测调试。文章以2.4GHz Wi-Fi前端电路为例,手把手演示了从理论计算到硬件实现的全过程,并分享了关键的工程经验与调试技巧。

weixin_29271263的博客 536

构建基于知识图谱的金融风险关联网络

在金融领域,风险的识别和管理至关重要。传统的风险分析方法往往只能处理单一维度的数据,难以全面捕捉金融市场中复杂的风险关联关系。构建基于知识图谱的金融风险关联网络的目的在于整合多源异构的金融数据,通过知识图谱的方式清晰地展示金融实体之间的复杂关系,从而更准确地识别潜在的金融风险,为金融机构的风险管理决策提供有力支持。本项目的范围涵盖了从金融数据的收集、预处理,到知识图谱的构建,再到金融风险关联网络的搭建和分析。

SuperAGI2025 1420

[每日算法 - 华为机试] leetcode20 :有效的括号 「栈」

[每日算法 - 华为机试] leetcode20 :有效的括号 「栈」方法一解题思路...

一辉的博客 135

运放比较电路分析以及应用

摘要:本文介绍了基于LM321运放的同相输入型单限电压比较器电路。该电路通过运放开环工作模式实现电平判断:当输入信号Vs+>0V时输出+15V高电平,Vs+<0V时输出≈0V低电平。典型应用包括直流电压过零检测、交流信号整形、电池欠压报警和数字信号噪声过滤。电路具有结构简单(仅需1个运放和1个电阻)、成本低的优势,适用于传感器信号处理、波形转换等场景。使用时需注意参考电平调整、输出电平匹配等问题,如需抗噪声可增加正反馈电阻构成施密特触发器。该电路是运放实现简单电平逻辑的经典方案。

qq_37999850的博客 395

【leetcode刷题笔记】20.有效的括号“( ),{ },[ ]”

题目描述: 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 示例 1: 输入:s = “()” 输出:true 示例 2: 输入:s = “()[]{}” 输出:true 示例 3: 输入:s = “(]” 输出:false 示例 4: 输入:s = “([)]” 输出:false 示例 5: 输入:s = “{[]}” 输出:true 解题思路: 1.在此之前.

zbcwmq的博客 190

YOLOv13有效涨点改进专栏目录 | 本专栏持续更新500+篇内容 | 包含各种卷积、主干网络、各种注意力机制、检测头、损失函数、小目标检测改进、二次创新模块、独家创新等几百种创新点改进

《YOLOv13改进专栏重磅更新》推出500+创新改进方案,涵盖卷积、主干网络、注意力机制、检测头等核心模块优化。专栏提供完整项目代码及答疑服务,包含YOLOv13网络结构解析、环境配置、模型训练全流程指导。内容分为八大模块:卷积优化、注意力机制、细节涨点、主干网络改进、特征融合、检测头优化、小目标检测及Mamba联合改进等,支持多种创新点组合应用,助力科研论文发表。现开放限时订阅,提供试读章节和详细技术解析。

Ai缝合怪、助力小伙伴高效发论文 3378

【雕爷学编程】Arduino智能家居之DS18B20温度传感器

1、温度和湿度控制:通过连接温度传感器和湿度传感器,Arduino可以实时监测室内环境的温度和湿度,并通过控制空调、加热器或加湿器等执行器,实现室内温湿度的自动调节。设计用户友好的界面和操作方式,提供简单直观的控制和反馈机制,以及考虑用户习惯和需求,能够提升系统的整体用户体验。这意味着用户可以根据自己的需求和创意,自定义和定制智能家居系统的功能和外观。5、能源管理:Arduino可以与电能监测模块和智能插座等设备结合使用,实时监测家庭能源的使用情况,并通过自动控制电器设备的开关,实现能源的有效管理和节约。

雕爷学编程 2873

「leetcode」C++题解:20. 有效的括号,括号匹配是使用栈解决的经典问题

括号匹配是使用栈解决的经典问题

代码随想录 697

【DeepSeek R1构建本地RAG知识库】数据结构化清洗-知识图谱制作、使用、dify集成

本文探讨了在构建本地RAG(Retrieval-Augmented Generation)系统时,如何通过引入知识图谱来增强系统的知识理解能力。传统的向量数据库和嵌入模型虽然能处理语义匹配,但无法有效捕捉知识间的关联性。知识图谱通过“实体-关系-属性”的结构化表示,能够更好地支持推理、推荐和多跳问答等高级功能。文章详细介绍了知识图谱的基本概念、制作思路,以及如何使用Neo4j图数据库进行知识图谱的构建和查询。通过实例展示了从PDF文件解析到知识图谱入库的全过程,强调了知识图谱在提升RAG系统性能中的重要作用

少说,多做 563

力扣——20有效的括号

20. 有效的括号 - 力扣(LeetCode),判断字符串是否有效。

2301_77433167的博客 777

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Leetcode 20. 有效的括号

Leetcode 20. 有效的括号1、问题分析2、问题解决3、总结 1、问题分析 题目链接:https://leetcode-cn.com/problems/valid-parentheses/   本质上就是一个栈操作。代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不懂(可以多看几遍),欢迎留言哦!我看到会解答一下。 2、问题解决   笔者以C++方式解决。 #include "iostream" using namespace std; #include "algorith

珍惜 8942

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

LeetCode —— 20. 有效的括号

map 使用练习

微笑,来自内心坚不可摧的自信。 679

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【LeetCode 热题 100】20. 有效的括号

Problem:给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。

最短的捷径就是绕远路,绕远路才是我的最短捷径。 1688

C/C++描述 LeetCode 20. 有效的括号 栈实现

给定一个只包括 `'('`,`')'`,`'{'`,`'}'`,`'['`,`']'` 的字符串,判断字符串是否有效。 有效字符串需满足: 1. 左括号必须用相同类型的右括号闭合。 2. 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 **示例 1:** ``` 输入: "()" 输出: true ``` **示例 2:** ``` 输入: "()[]{}" 输出: true ``` **示例 3:** ``` 输入: "(]" 输出: false ``` **示例 4

一起加油 1730

LeetCode | 20.有效的括号(C语言版)

这次来写一下 LeetCode 的第 20 题,有效的括号。 题目描述 题目直接从 LeetCode 上截图过来,题目如下: 上面的题就是 有效的括号 题目的截图,同时 LeetCode 给出了一个函数的定义,然后要求实现 有效的括号 的函数体。函数定义如下: bool isValid(char* s) { } 从上面函数的定义来看,参数是一个字符串,字符串中保存了括号的序列。 问题分析 这个题目是要判...

码农UP2U 1959

LeetCode No.20 有效的括号

LeetCode No.20 有效的括号ProblemSolvingCode(C++) Problem 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 : 输入 输出 “()” true “()[]{}”...

m0_46543760的博客 160

LeetCode 20. 有效的括号

LeetCode 20. 有效的括号 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/valid-parentheses 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 bool isValid(char * s)

qq_44854086的博客 123

LeetCode每日精进:20.有效的括号

若s为图中所示字符串,在匹配完合法括号后还有左括号入栈,那么就会导致跳出循环后。使用栈之前需要添加实现栈的相关代码:参考。的特性,可以借助栈来实现对应括号的消除,匹配。· 直接让左括号入栈。所以需要对循环后的栈进行判空,这里使用。,s为图示字符串,那么直接。,判断字符串是否有效。,进行下一组括号的匹配。,说明栈中还有左括号,

ll778811的博客 928

Leetcode-20有效的括号(java实现)

Leetcode-20有效的括号(java实现) 题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 1. 左括号必须用相同类型的右括号闭合。 2. 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 示例 3: 输入: "(]" 输出: false 分析: 括号是有key-value 关系的 括号的关闭顺序是

三少说 421

力扣20 有效的括号 java实现

该题可以直接用栈来解决,栈先入后出特点恰好与本题括号排序特点一致,即若遇到左括号入栈,遇到右括号时将对应栈顶左括号出栈,则遍历完所有括号后 stack 仍然为空。,判断字符串是否有效。

m0_58648798的博客 659

有效的括号 力扣20

这题算是栈的经典应用。主要有三种情况:第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字符。所以return false第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false。

qq_65031432的博客 1347

每日一道笔试题--leetCode:20. 有效的括号(简单)

每日一道笔试题–leetCode:20. 有效的括号(简单) ##leetCode:20. 有效的括号(简单) 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 示例 3: 输入: "(]" 输出: false 示例 4: 输入:

水巷石子的博客 3368
上一篇: 「力扣」14. 最长公共前缀
下一篇: 21. 合并两个有序链表
「已注销」
博客等级 码龄3年 128粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值