当前位置: 首页 > article >正文

LeetCode-有效的括号(020)

一.题目描述

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

有效字符串需满足:

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

二.示例 

示例 1:

输入:s = "()"

输出:true

示例 2:

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

输出:true

示例 3:

输入:s = "(]"

输出:false

示例 4:

输入:s = "([])"

输出:true

三.提示:

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

四.解法:

方法一:栈

遍历括号字符串 s,遇到左括号时,压入当前的左括号;遇到右括号时,弹出栈顶元素(若栈为空,直接返回 false),判断是否匹配,若不匹配,直接返回 false

也可以选择遇到左括号时,将右括号压入栈中;遇到右括号时,弹出栈顶元素(若栈为空,直接返回 false),判断是否是相等。若不匹配,直接返回 false

两者的区别仅限于括号转换时机,一个是在入栈时,一个是在出栈时。

遍历结束,若栈为空,说明括号字符串有效,返回 true;否则,返回 false

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

五.代码

Java代码

class Solution {
    public boolean isValid(String s) {
        // 使用双端队列作为栈来存储左括号
        Deque<Character> stk = new ArrayDeque<>();
        
        // 遍历字符串中的每个字符
        for (char c : s.toCharArray()) {
            // 如果是左括号,压入栈中
            if (c == '(' || c == '{' || c == '[') {
                stk.push(c);
            } else if (stk.isEmpty() || !match(stk.pop(), c)) {
                // 如果是右括号,检查栈是否为空或栈顶元素是否匹配
                return false;
            }
        }
        
        // 如果栈为空,说明所有括号匹配成功
        return stk.isEmpty();
    }

    // 辅助函数,用于检查括号是否匹配
    private boolean match(char l, char r) {
        return (l == '(' && r == ')') || (l == '{' && r == '}') || (l == '[' && r == ']');
    }
}

注释说明
    ·栈的使用:使用 Deque 作为栈来存储左括号,方便后续匹配。
    ·遍历字符串:逐个检查字符串中的字符。
        ·左括号处理:如果是左括号,直接压入栈中。
        ·右括号处理:如果是右括号,检查栈是否为空或栈顶元素是否匹配。
            ·如果栈为空或不匹配,返回 false。
    ·匹配检查:使用辅助函数 match 检查当前右括号是否与栈顶左括号匹配。
    ·最终检查:遍历结束后,检查栈是否为空,若为空则所有括号匹配成功,返回 true。

🌟 关注我的CSDN博客,收获更多技术干货! 🌟


http://www.kler.cn/a/467950.html

相关文章:

  • Java实现下载excel模板,并实现自定义下拉框
  • 实现AVL树
  • Gitee图形界面上传(详细步骤)
  • 01、Docker学习,第一天:简单入门与安装
  • [python3]Excel解析库-xlutils
  • Kafka消息队列
  • CES Asia 2025:科技企业的全球发展引擎
  • 《解锁PyTorch潜能:探索强大的辅助库》
  • 智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之9 重新开始 之2 “三端架构”各自的“中间区”:三支决策的肯定/待定/否定
  • 从零开始开发纯血鸿蒙应用之实现起始页
  • 【方案设计】针对监控服务-功能时长统计的几个实现方案
  • 云备份项目--服务端编写
  • Oracle 11g rac + Dataguard 环境调整 redo log 大小
  • React虚拟DOM:理解和应用
  • torch.reciprocal介绍
  • 游戏引擎学习第70天
  • 面试题解,Java中的“对象”剖析
  • 【js引擎】quickjs 中的两个 proto
  • 5 Linux 网络编程基础 API
  • 家教老师预约平台小程序系统开发方案
  • 数据结构-顺序表及其应用
  • 【pytorch练习】使用pytorch神经网络架构拟合余弦曲线
  • 电商项目-基于ElasticSearch实现商品搜索功能(一)
  • 2025-01-04 Unity插件 YodaSheet1 —— 插件介绍
  • 【深度学习入门_基础篇】线性代数本质
  • 进军AI大模型-Langchain程序部署