算法 LeetCode 题解 | 有效的括号

大家好,我是木川

一、题目描述

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。

  2. 左括号必须以正确的顺序闭合。

  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 1 <= s.length <= 104

  • s 仅由括号 '()[]{}' 组成

二、题解

一)栈 + 哈希表

思路:使用栈进行字符串的入栈和出栈,使用哈希表存储右括号对应的左括号

1、遍历字符串,碰到左括号入栈

2、遍历字符串,碰到右括号出栈,并且判断栈顶的左括号和当前右括号是否是一对

代码:

func isValid(s string) bool {
    stack := []byte{}
    pairs := map[byte]byte{
        ')': '(',
        ']': '[',
        '}': '{',
    }
    for i := 0; i < len(s); i++ {
        if _, ok := pairs[s[i]]; !ok {
            // 入栈:(、[、{
            stack = append(stack, s[i])
        } else {
            // 碰到 )、]、} 但栈为空
            if len(stack) == 0 {
                return false
            }
            // 出栈:)、]、}
            if stack[len(stack)-1] != pairs[s[i]] {
                return false
            }
            stack = stack[:len(stack)-1]
        }
    }

    return len(stack) == 0
}

时间复杂度:O(n),一次 for 循环遍历 O(n)

空间复杂度:O(n),栈使用的空间为 O(n),而哈希表使用的空间为 O(6)

今天的分享就到这里了,加下面微信拉你进编程技术交流群

94a1a065f573d221b0b7fd376329e830.png

如果对你有帮助,帮我点一下在看或转发,欢迎关注我的公众号

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java源码分析:Guava之不可变集合ImmutableMap的源码分析

原创/朱季谦 一、案例场景 遇到过这样的场景&#xff0c;在定义一个static修饰的Map时&#xff0c;使用了大量的put()方法赋值&#xff0c;就类似这样—— public static final Map<String,String> dayMap new HashMap<>(); static {dayMap.put("Monday&q…

Apache Airflow (十) :SSHOperator及调度远程Shell脚本

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…

【计算机网络笔记】ICMP(互联网控制报文协议)

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

农户建档管理系统的设计与实现-计算机毕业设计源码20835

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设农户建档管理系统。 本…

项目技术复盘

背景 该项目接手时已是8月中下旬&#xff0c;并且客户要求九月中旬输出第一版本。这么紧急的节奏&#xff0c;不知道商务是如何答应的。临危受命&#xff0c;让我承担开发经理岗位&#xff0c;主导该项目。 开发团队 岗位 人员 base 架构师兼高级软件工程师 季工 上海 高…

Java中利用OpenCV进行人脸识别

OpenCV 概述 ​ OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源计算机视觉库&#xff0c;它提供了丰富的工具和算法&#xff0c;用于处理图像和视频数据。该库由一系列高效的计算机视觉算法组成&#xff0c;涵盖了许多领域&#xff0c;包括目…

C++单调向量算法:132 模式解法三枚举1

本题不同解法 包括题目及代码C二分查找算法&#xff1a;132 模式解法一枚举3C二分查找算法&#xff1a;132 模式解法二枚举2代码最简洁C二分查找算法&#xff1a;132 模式解法三枚举1性能最佳C单调向量算法&#xff1a;132 模式解法三枚举1 分析 时间复杂度 2轮循环时间复杂…

「引流工具」火炬多平台多功能引流高效推广脚本,抖音+快手+小红书多平台自动引流软件

全自动多平台多功能引流脚本&#xff1a; 脚本支持斗音&#xff0c;快手&#xff0c;小红薯&#xff0c;扣扣。默默&#xff0c;弹弹&#xff0c;金日头条&#xff0c;微博&#xff0c;知乎&#xff0c;bibi&#xff0c;易车&#xff0c;最右&#xff0c;美团&#xff0c;汽车…

微软正式宣布其首款人工智能芯片 Maia 100 及基于 Arm 的通用计算芯片 Cobalt 100

微软确认了此前的传闻&#xff1a;该公司已自主开发了 AI 芯片&#xff0c;旨在训练大型语言模型&#xff0c;减少对 Nvidia 的依赖。此外&#xff0c;微软还研制了自家的基于 Arm 架构的 CPU&#xff0c;专为云计算工作负载设计。这两款定制硅芯片旨在为其 Azure 数据中心提供…

Axure基础详解二十:中继器随机抽奖效果

效果演示 组件 一、中继器 建立一个“中继器”内部插入一个“正方形”&#xff0c;给“正方形”添加一个【样式效果】>>【选中状态】填充背景为红色&#xff0c;字体白色。在中继器表格中插入两列数据函数&#xff1a;【xuhao】(序号列&#xff0c;按12345……填写&…

【DevOps】Git 图文详解(二):Git 安装及配置

Git 图文详解&#xff08;二&#xff09;&#xff1a;Git 安装及配置 1.Git 的配置文件2.配置 - 初始化用户3.配置 - 忽略.gitignore Git 官网&#xff1a;https://www.git-scm.com/ 下载安装包进行安装。Git 的使用有两种方式&#xff1a; 命令行&#xff1a;Git 的命令通过系…

L1 频段卫星导航射频前端低噪声放大器芯片MS2659

产品简述 MS2659 是一款具有高增益、低噪声系数的低噪声放大器 (LNA) &#xff0c;支持 L1 频段多模式全球卫星定位&#xff0c;可以应用于 GPS 、 北斗二代、伽利略、 GLONASS 等 GNSS 导航接收机中。芯片采 用 SOT23-6 的封装形式。 主要特点 ◼ 支持北斗、 …

【mysql】2006 - Server has gone away

执行了一组插入语句 提示&#xff1a;2006 - Server has gone away&#xff1b; 2006-服务器已经消失&#xff1b; 消失去哪里了&#xff0c;被黑洞吞没了吗&#xff1f;&#xff01;&#xff01;&#xff01; 网络问题 网络不稳定&#xff1f;断网了&#xff1f;检查网络连…

asp.net实验室设备管理系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目

一、源码特点 asp.net实验室设备管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 asp.net实验室设备管理系统1 二、功能介绍 本系统使用Microsoft Visual Studio 2019为开发工具&#xff0c;SQL …

Appium自动化测试完全指南

背景 在当今快速发展的互联网时代&#xff0c;UI 需求越来越大、越来越高大上、越来越复杂&#xff0c;相对应的 App 作为最重要的大前端的一部分&#xff0c;也不可避免。 App 迭代的不断加速&#xff0c;需求的不断复杂化&#xff0c;给测试人员增加了非常大的工作量&#…

十二.Jenkins持续集成

十二.Jenkins持续集成 一.安装jenkins 1.下载 Jenkins下载地址&#xff1a;http://jenkins-ci.org/ 或 https://mirrors.jenkins-ci.org/redhat/2.安装 可以通过官网的安装方式来安装 安装完后&#xff0c;需要修改以下的配置 vim /usr/lib/systemd/system/jenkins.servic…

揭示高防CDN的局限性与探讨其小众化原因

在网络安全领域&#xff0c;高防CDN&#xff08;高防御内容分发网络&#xff09;被认为是保护网站免受恶意攻击的强大工具&#xff0c;然而&#xff0c;尽管其在防护方面表现卓越&#xff0c;高防CDN在广泛应用中仍然相对小众。本文将从高防CDN的局限性出发&#xff0c;深入探讨…

nodejs微信小程序-客户管理管理系统的设计与实现-安卓-python-PHP-计算机毕业设计推荐

然而客户管理系统是一项较为复杂的工作&#xff0c;涉及多个组织、多个层次的协调和共同管理&#xff0c;整个过程需要将管理系统和人员进行全面整合。文章在具体研究过程中从多方面入手&#xff0c;针对当前企业管理中客户管理系统应用存在的问题进行了分析&#xff0c;阐述了…

酷柚易汛ERP - 通用设置操作指南

1、系统设置 对系统进行初步设置&#xff0c;如系统LOGO、站点名称、备案号、版权信息、尾部信息及系统相关的一些基础设置 2、应用/小程序配置 对系统移动端进行相关配置 3、短信配置 对系统短信进行配置&#xff0c;此配置用于移动端一些通知类信息发送【目前仅支持阿里云…

Pandas get_dummies用法

get_dummies 是 pandas 实现one hot encode的方式 ​  one-hot的基本思想&#xff1a;将离散型特征的每一种特征取值都看成一种状态&#xff0c;若指定离散特征中有N个 不相同的取值&#xff0c;那么我们就可以将该特征抽象成N种不同的状态&#xff0c;one-hot编码保证了每一…