leetcode20. 有效的括号 [简单题]

2023-11-04

题目

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

有效字符串需满足:

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

示例 1:

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

示例 2:

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

示例 3:

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

思路

典型的栈问题,数据结构书中都有用栈来作括号匹配的问题。

①字符串长度为奇数,直接返回false

②“( ] )”,当有这样的右括号时,也让他入栈,最后判断栈非空,则返回 false;

③“( ) { } } {”,

④“{ [ ] }”,

代码

class Solution {
public:
    bool isValid(string s) {
        int len = s.length();
        bool flag;
        if (len % 2 != 0)
            flag = false;
        stack<char> st;
        int i;    
        for (i = 0; i < len; i++) {
            // 遇到左括号,入栈
            if (s[i] == 40 || s[i] == 91 || s[i] == 123) {  
                st.push(s[i]);
            }
            // 遇到右括号,取栈顶元素,看是否匹配。匹配则出栈,不匹配则入栈
            char a;
            if (s[i] == 41 || s[i] == 93 || s[i] == 125) {  
                // 遇到右括号时,栈中无元素,则直接返回false
                if (st.empty()) {
                    flag = false;
                    break;
                }
                if (!st.empty()) {
                    a = st.top();
                }
                if ((a == 40 && s[i] == 41) || (a == 91 && s[i] == 93) || (a == 123 && s[i] == 125)) {
                    st.pop();   // 匹配则出栈
                }else{
                    st.push(s[i]);  // 不匹配则入栈
                }
            }
        }
        if (i != len) {
            return flag;
        }
        if (i == len && st.empty())
            flag = true;
        return flag;
    }
};

答案思路:

建立map,键为右括号,值为左括号。

unordered_map<char, char> pairs = {
            {')', '('},
            {']', '['},
            {'}', '{'}
};

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

leetcode20. 有效的括号 [简单题] 的相关文章

  • 软件测试|sqlalchemy relationship

    简介 SQLAlchemy是一个流行的Python ORM 对象关系映射 库 它允许我们以面向对象的方式管理数据库 在SQLAlchemy中 relationship 是一个重要的功能 用于建立表之间的关系 在本文中 我们将详细探讨 rel
  • 扬帆证券:成功投资的第一步:首次购买股票需要注意什么?

    关于第一次入市买股票的出资者来说 需求留意以下几点 1 股票的买卖规则 买卖时刻 早盘集合竞价9 15 9 25 尾盘集合竞价14 57 15 00 其中在9 15 9 20之间 出资者能够申报 也能够吊销申报 9 20 9 25之间 出资
  • 用CHAT分析高校体育智慧教学体系构建与探索研究现状

    CHAT回复 现阶段 高校体育智慧教学体系的构建与探索研究还处于初级阶段 但全球数字化转型大潮的推动下 一些较为前沿的研究和实践已经开始出现 1 教学平台的建设 很多高校已经开始尝试使用在线教育平台进行体育教学 把传统的面对面授课模式转变为
  • 软件测试|教你如何使用Python绘制出奥运五环旗

    简介 我们之前介绍过使用turtle来绘制正多边形 但是绘制正多边形只是turtle模块最基础的使用 我们可以使用turtle模块绘制出更多不一样的精彩图形 本文就来给大家介绍一个比较简单的turtle绘图实例 绘制奥运五环旗 初始化参数
  • 【计算机毕业设计】毕业生就业管理微信小程序_lm9q0

    腾讯公司在2017年1月19日发布了一款不需要下载 不需要卸载 不需要存储的软件叫微信小程序 受到了很多人的喜欢 微信小程序自2017年发布至今 依托微信的社交属性和庞大的用户基数 已经渗透到生活的方方面面 1 微信小程序可以将基于微信平台
  • 【计算机毕业设计】白优校园社团网站的设计与实现

    近些年 随着中国经济发展 人民的生活质量逐渐提高 对网络的依赖性越来越高 通过网络处理的事务越来越多 随着白优校园社团网站的常态化 如果依然采用传统的管理方式 将会为工作人员带来庞大的工作量 这将是一个巨大考验 需要投入大量人力开展对社团
  • Python自动化测试 | 如何使用Robot Framework进行自动化测试?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Hutool改变我们的coding方式(二)

    Hutool改变我们的coding方式 Hutool 简介 Hutool如何改变我们的coding方式 文档 安装 Maven
  • (2024最新整理)Java最全八股文及答案!

    Java的特点 Java是一门面向对象的编程语言 面向对象和面向过程的区别参考下一个问题 Java具有平台独立性和移植性 Java有一句口号 Write once run anywhere 一次编写 到处运行 这也是Java的魅力所在 而实
  • 春眠不觉晓,Java数据类型知多少?基础牢不牢看完本文就有数了

    俺滴座右铭是不在沉默中爆发 就在沉默中灭亡 一起加油学习 珍惜现在来之不易的学习时光吧 等工作之后 你就会发现 想学习真的需要挤时间 厚积薄发啦 我们知道Java是面向对象的静态型编程语言 在Java的世界里万物皆对象 但我认为是万物皆数据
  • 计算机Java项目|基于SpringBoot个人空间平台的设计与实现

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 2024史上最全Java面试八股文(带全部答案)

    今天要谈的主题是关于求职 求职是在每个技术人员的生涯中都要经历多次 对于我们大部分人而言 在进入自己心仪的公司之前少不了准备工作 有一份全面细致 面试题 将帮助我们减少许多麻烦 在跳槽季来临之前 特地做这个系列的文章 一方面帮助自己巩固下基
  • JCMsuite应用:光学环形谐振腔模拟

    本案程演示了环形谐振腔的模拟 这种类型的集成光子器件 例如用作升 降滤波器或在传感应用中 当物质或粒子附着在环上时 通过测量其共振频率的位移来检测 对于集成光子电路中的无源光器件 s矩阵通常是研究的热点 它描述了通过端口 波导进入设备的电磁
  • 【Linux】文件周边001之系统文件IO

    樊梓慕 个人主页 个人专栏 C语言 数据结构 蓝桥杯试题 LeetCode刷题笔记 实训项目
  • 基于节点电价的电网对电动汽车接纳能力评估模型研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据
  • 【路径规划】基于改进遗传算法求解机器人栅格地图路径规划(Matlab实现实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 初学者如何快速入门Python(内附详细攻略),一文讲清

    目前python可以说是一门非常火爆的编程语言 应用范围也非常的广泛 工资也挺高 未来发展也极好 Python究竟应该怎么学呢 我自己最初也是从零基础开始学习Python的 给大家分享Python的学习思路和方法 一味的买书看书 看视频 是
  • Java开发中不要使用受检异常

    简介 Java是唯一 主流 实现了受检异常概念的编程语言 一开始 受检异常就是争议的焦点 在当时被视为一种创新概念 Java于1996年推出 如今却被视不良实践 本文要讨论Java中非受检异常和受检异常的动机以及它们优缺点 与大多数关注这个
  • Java进阶之旅第七天

    Java进阶之旅第七天 文章目录 Java进阶之旅第七天 方法引用 介绍 代码展示 结果 方法引用的分类
  • 计算机Java项目|java游戏账号交易系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板

随机推荐

  • 让特定软件使用独显/集显的解决方法

    今天下载OBS Studio 一款直播 录制软件 但是配置显示器捕获 输出黑屏 原因是软件需要在集显环境下运行 然而日常写图形学的弱鸡还得用独显赶ddl呢 所以我们可以给特定软件配置默认显卡 设置 gt 显示 gt 图形设置 gt 浏览 g
  • 7-10 求解矩阵最小路径和问题 (12 分)

    给定一个m行n列的矩阵 从左上角开始每次只能向右或者向下移动 最后到达右下角的位置 路径上的所有数字累加起来作为这条路径的路径和 求所有路径和中最小路径和 输入格式 首先输入行数m及列数n 接下来输入m行 每行n个数 输出格式 输出第一行为
  • JS增删改查常用方法

    1 增 常规方法 arr push aaa 在数组后添加aaa 返回新数组长度 arr unshift aaa 在数组首位添加aaa 返回新数组长度 arr i aaa 与push一样 非常规方法 arr splice 2 0 lll qq
  • Kafka源码阅读

    工程版本与工程建立 kafaka 使用scalar java 语言编写 kafaka 源码阅读版本 kafka 0 10 1 1 工程建立 1 安装 JDK8 2 安装 gradle 3 0 3 下载安装IDEA 社区版 免费 4 用IDE
  • 华为OD机试 C++ 矩阵稀疏扫描

    题目 描述 题目描述 一个矩阵 如果其中大部分元素都是0 我们就称它为 稀疏矩阵 稀疏矩阵在实际应用中很常见 处理这种矩阵可以大大提高计算效率 现在 你得到了一个矩阵 要求你检查哪些行和列是 稀疏 的 稀疏 的定义是 当一个行或列中的0的数
  • Java基础——this,super,构造函数

    this this是正在访问的代码所属的对象 是一个对象 关键字this有两个用途 引用隐式参数 调用该类其他的构造器 super super关键字有两个用途 调用超类的方法 调用超类的构造器 构造函数 构造函数可以重载 但是不能被继承 也
  • angular 如何实现ng-model

    最近在用angular5写项目 刚接触angular 他对于我还是陌生的朋友 最近写了一个组件 用到了ng model的实现 所以这里简单记录下 比如要创建一个组件叫my input 1首先 在 Component配置中添加encapsul
  • 达梦数据库教程:DM8查询慢SQL

    set echo off set feedback off set timing off set verify off set lineshow off SELECT SESS ID EXEC TIME FINISH TIME N RUNS
  • 使用Jupyter分析Wi-Fi数据

    在嗅探Wi Fi时 Wireshark是跨平台的 能够捕获大量数据 弄清这些数据完全是另一项任务 这就是Jupyter Notebook的用武之地 它可以帮助分析Wi Fi数据包 并确定特定电话以前连接过的网络 从而使我们可以了解所有者的身
  • buildroot之交叉编译环境

    前言 为了搭建交叉编译环境 查了很多的方法 有自己搭建的 高手 有的用cross ng工具的等等 最后查到了buildroot这个工具 最后为啥选择这个工具的原因是buildroot不仅能搭建交叉编译环境 而且还能编译内核 根文件系统 可见
  • 360无线网卡驱动服务器,360无线网卡驱动

    这是360无线网卡驱动下载 一款USB接口的无线网卡 插在台式机上 是可以做无线网卡接收Wi Fi上网的 作为 随身Wi Fi 其作用是把台式机或笔记本电脑的网络发射为Wi Fi热点 可以供手机 平板或者笔记本电脑等有Wi Fi功能的设备使
  • Java反编译器推荐:5款顶级工具助力Java代码逆向分析

    Java反编译器推荐 5款顶级工具助力Java代码逆向分析 Java反编译和编译是软件开发者 安全研究人员和逆向工程师在分析和理解Java代码时常常遇到的任务 本文将为您介绍五款最佳的Java反编译器 这些工具能够帮助您还原被编译为字节码的
  • 华为OD机试真题- 目录删除-2023年OD统一考试(B卷)

    题目描述 某文件系统中有N个目录 每个目录都一个独一无二的ID 每个目录只有一个父目录 但每个父目录下可以有零个或者多个子目录 目录结构呈树状结构 假设 根目录的ID为0 且根目录没有父目录 其他所有目录的ID用唯一的正整数表示 并统一编号
  • Connectify Hotspot,让你的电脑变成WIFI热点!!

    http www ttrar com html Connectify Hotspot Professional html down 我使用的是破解版
  • 在C语言中怎样定义一个字符串并输入输出

    在C语言中没有字符串类型 用字符数组处理字符串 字符数组定义 char 数组名 常量表达式 常量表达式 说明 一维字符数组 用于存储和处理一个字符串 二维字符数组 用于同时存储和处理多个字符串 输入输出方法 逐个字符输入输出 c 整个字符串
  • 使用HTTP获取 OAuth 2.0 access tokens(Google)

    请求access token流程 1 搭建开发环境 申请Google账号 登录Google账号 进入创作者工作室 进入直播栏目 打开个人账户直播功能 进入google develop console a 创建新项目 b 启用YouTube
  • 如何用qt获取/etc/network/interface文件中的配置信息及写入信息

    void read interface file QFile readFile etc network interfaces QString strAll if readFile open QIODevice ReadOnly QIODev
  • C语言学习系列1-helloworld示例

    操作环境 CentOS release 6 4 Final 新建文件helloworld c 编辑保存如下内容 include
  • C语言函数大全-- s 开头的函数(3)

    s 开头的函数 3 1 sleep 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 sopen 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 sound 3 1 函数说明 3 2 演示示例 4 spawnl 4 1 函
  • leetcode20. 有效的括号 [简单题]

    题目 给定一个只包括 的字符串 s 判断字符串是否有效 有效字符串需满足 左括号必须用相同类型的右括号闭合 左括号必须以正确的顺序闭合 每个右括号都有一个对应的相同类型的左括号 示例 1 输入 s 输出 true 示例 2 输入 s 输出