【力扣】用栈判断有效的括号
有效的括号原题地址
方法一:栈
对于特殊情况,当字符串的长度为奇数时,一定不是有效的括号。
对于一般情况,考虑使用数据结构栈。
遍历字符串,
- 遇到左括号时,就入栈。
- 遇到右括号时,
- 若栈顶元素是与这个右括号匹配的左括号,就成功匹配了一对括号,出栈即可。
- 若栈顶元素不是与这个右括号匹配的左括号,或者栈为空,就匹配失败,不是有效的括号。
当字符串遍历完时,
- 若栈不为空,说明还有左括号未匹配,不是有效的括号。
- 若栈为空,说明所有括号都匹配完了,是有效的括号。
由于题目描述说明,字符串中的字符不是左括号就是右括号,所以可以使用 key-value 模型的哈希结构来存储键值对,其中右括号为键,左括号为值。这样,对于每个字符,只需判断其是否在哈希表中,就能判断是左括号还是右括号。遇到右括号时,可以直接在哈希表中查询其对应的左括号。
C++ 中,建议使用 unordered_map<char, char> 来存储键值对,并定义成静态的类成员变量,因为在整个程序运行期间只需要存在一份。
[](){()}
^
入栈 -> [[](){()}^
出栈[](){()}^入栈 -> ([](){()}^出栈[](){()}^入栈 -> {[](){()}^入栈 -> {([](){()}^出栈 -> {[](){()}^出栈,此时栈为空,是有效的括号
// 方法一:栈
class Solution
{
public:bool isValid(string s){// 字符串长度为奇数if (s.size() % 2){return false;}stack<char> st;for (auto ch : s){// 右括号出栈匹配if (pairs.count(ch)){// 栈为空或不匹配if (st.empty() || st.top() != pairs[ch]){return false;}st.pop();}else // 左括号入栈{st.push(ch);}}// 栈中是否还有没匹配的左括号return st.empty();}
private:static unordered_map<char, char> pairs;
};unordered_map<char, char> Solution::pairs
{{')','('},{']','['},{'}','{'}
};
相关文章:
【力扣】用栈判断有效的括号
有效的括号原题地址 方法一:栈 对于特殊情况,当字符串的长度为奇数时,一定不是有效的括号。 对于一般情况,考虑使用数据结构栈。 遍历字符串, 遇到左括号时,就入栈。遇到右括号时, 若栈顶元…...
【目录】CSAPP的实验简介与解法总结(已包含Attack/Link/Architecture/Cache)
文章目录 Attack Lab(缓冲区溢出实验)对应书上Chap3Link Lab(链接实验) 对应书上Chap7Architecture Lab(体系结构实验)对应书上Chap4-5Cache Lab(缓存实验)对应书上Chap6 Attack Lab…...
【机器学习】数据清洗之识别缺失点
🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步…...
【Vue】Vue基础入门
📝个人主页:五敷有你 🔥系列专栏:Vue ⛺️稳重求进,晒太阳 Vue概念 是一个用于构建用户界面的渐进式框架优点:大大提高开发效率缺点:需要理解记忆规则 创建Vue实例 步骤: …...
正点原子-STM32通用定时器学习笔记(1)
目录 1. 通用定时器简介(F1为例) 2. 通用定时器框图 ①时钟源 ②控制器 ③时基单元 ④输入捕获 ⑤捕获/比较(公共) ⑥输出比较 3.时钟源配置 3.1 计数器时钟源寄存器设置方法 3.2 外部时钟模式1 3.3 外部时钟模式2 3…...
Redis篇之redis是单线程
一、redis是单线程 Redis是单线程的,但是为什么还那么快?主要原因有下面3点原因: 1. Redis是纯内存操作,执行速度非常快。 2. 采用单线程,避免不必要的上下文切换可竞争条件,多线程还要考虑线程安全问题。 …...
随机MM引流源码PHP开源版
引流源码最新随机MM开源版PHP源码,非常简洁好看的单页全解代码没任何加密 直接上传即可用无需数据库支持主机空间...
【C++修行之道】(引用、函数提高)
目录 一、引用 1.1引用的基本使用 1.2 引用注意事项 1.3 引用做函数参数 1.4 引用做函数返回值 1.5 引用的本质 1.6 常量引用 1.7引用和指针的区别 二、函数提高 2.1 函数默认参数 2.2函数占位参数 2.3 函数重载 2.4函数重载注意事项 一、引用 1.1引用的基本使用 …...
从零开始手写mmo游戏从框架到爆炸(十一)— 注册与登录
导航:从零开始手写mmo游戏从框架到爆炸(零)—— 导航-CSDN博客 从这一章开始,我们进入业务的部分,从注册登录开始。 创建注册和登录的路由 package com.loveprogrammer.command.server;public interface Se…...
【SpringBoot】Redis集中管理Session和自定义用户参数解决登录状态及校验问题
🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》 🛸学无止境,不骄不躁,知行合一 文章目录 前言一、分布…...
【0256】揭晓pg内核中MyBackendId的分配机制(后端进程Id,BackendId)(二)
上一篇:【0255】揭晓pg内核中MyBackendId的分配机制(后端进程Id,BackendId)(一) 文章目录 1. 前言2. 分配BackendId2.1 何时为backend process分配BackendId2.1.1 找出未使用的slot(inactive slot)2.3 BackendId序号从多少开始?2.4 后端进程退出后,其BackendId被释放…...
eclipse4.28.0版本如何安装FatJar插件
场景: 今天准备温故下以前的老项目,于是下载了最新版本的Eclipse IDE for Enterprise Java and Web Developers - 2023-06,老项目中有些需要将程序打成jar包,于是考虑安装FatJar插件。 问题描述 一顿操作后,发现FatJar死活安装了,在线安装提示content.xml异常;离线安装…...
查大数据检测到风险等级太高是怎么回事?
随着金融风控越来越多元化,大数据作为新兴的技术被运用到贷前风控中去了,不少人也了解过自己的大数据,但是由于相关知识不足,看不懂报告,在常见的问题中,大数据检测到风险等级太高是怎么回事呢?小易大数据…...
Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组
两数之和 —— 无序数组 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现…...
Hair Tool for Blender3D
CGer.com - Hair Tool for Blender3D - CGer资源网 Hair Tool 1.5 for Blender3D 链接: https://pan.baidu.com/s/1kVABn6n 密码: gwprHair Tool 1.65-1.8 for Blender链接: https://pan.baidu.com/s/1A7cW_Ms2baGQ2M0iE1dQhQ 密码: 81bqHair Tool for Blender 1.9.2链接: http…...
【最详解】如何进行点云的凹凸缺陷检测(opene3D)(完成度80%)
文章目录 前言实现思路想法1想法2想法3 补充实现想法1想法2代码 想法3代码 总结 前言 读前须知: 首先我们得确保你已经完全知晓相关的基本的数学知识,其中包括用最小二乘法拟合曲二次曲面,以及曲面的曲率详细求解。若还是没弄清楚࿰…...
海外云手机——平台引流的重要媒介
随着互联网的飞速发展,跨境电商、短视频引流以及游戏行业等领域正经历着迅猛的更新换代。在这个信息爆炸的时代,流量成为至关重要的资源,而其中引流环节更是关乎业务成功的关键。海外云手机崭露头角,成为这一传播过程中的重要媒介…...
数据库-计算机三级学习记录-4DBAS功能概要设计
DBAS功能概要设计 参照b站【计算机三级数据库技术】 DBAS功能设计包括应用软件中的数据库事务设计和应用程序设计。 功能设计过程一般被划分为总体设计、概要设计和详细设计。而具体到数据库事务设计部分,又可分成事务概要设计和事务详细设计。完成系统设计工作之后…...
JVM-虚拟机栈
虚拟机栈 Java虚拟机栈(Java Virtual Machine Stack)采用栈的数据结构来管理方法调用中的基本数据,先进后出(First In Last Out),每一个方法的调用使用一个栈帧(Stack Frame)来保存。 接下来以…...
linux系统上tomcat简介以及安装tomcat
tomcat简介以及安装 Tomcat简介安装环境安装jdk安装tomcat浏览器访问 Tomcat简介 Tomcat是一个开源的Web服务器和servlet容器,由Apache软件基金会开发和维护。它是一种流行的Java Web应用服务器,用于运行Java编写的Web应用程序。 Tomcat提供了一个轻量级…...
uniapp复制文本的两种实现方式对比:从基础到进阶
Uniapp复制文本功能深度解析:从基础实现到跨平台适配 在移动应用和H5页面开发中,复制文本到剪贴板是一个看似简单却直接影响用户体验的基础功能。作为一款跨平台开发框架,Uniapp提供了多种实现方式,但每种方法都有其特定的适用场…...
DanKoe 视频笔记:赚钱是精神性的:破除“高尚的失败者”的迷思 [特殊字符]
在本节课中,我们将要学习一种关于金钱、商业和道德的全新视角。我们将探讨为何将赚钱视为不道德是一种幻觉,以及这种观念如何阻碍你为世界创造真正的价值。 在当今世界,最糟糕的事情之一就是陷入“高尚的失败者”的思维模式。许多聪明人讨厌…...
飞书机器人接入OpenClaw:Qwen3.5-4B-Claude模型对话触发方案
飞书机器人接入OpenClaw:Qwen3.5-4B-Claude模型对话触发方案 1. 为什么选择飞书OpenClaw的技术问答方案 去年团队内部开始频繁出现一个现象:每当新人遇到技术问题,总会在飞书群里反复老员工。简单的环境配置问题往往需要截图、录屏、文字描…...
Creo新手必看:如何快速搞定紫铜零件单位换算(附密度设置技巧)
Creo实战指南:紫铜零件单位换算与材料密度设置全解析 在三维建模领域,精确的材料属性设置往往被初学者忽视,却直接影响产品设计的可靠性和后续分析结果。作为Creo入门用户,当你第一次尝试为紫铜零件计算重量时,可能会…...
Polars 2.0清洗故障率下降92%的关键:schema-on-read预检 + 自定义error-handling策略(金融级数据治理标准)
第一章:Polars 2.0清洗故障率下降92%的关键洞察Polars 2.0 通过重构执行引擎与引入零拷贝数据验证机制,显著降低了ETL清洗阶段的运行时异常。核心改进在于将传统基于Python对象的列类型推断,替换为编译期静态Schema校验,并在LazyF…...
Navicat密码解密工具:企业级数据安全与密码恢复解决方案
Navicat密码解密工具:企业级数据安全与密码恢复解决方案 【免费下载链接】navicat_password_decrypt 忘记navicat密码时,此工具可以帮您查看密码 项目地址: https://gitcode.com/gh_mirrors/na/navicat_password_decrypt Navicat密码解密工具是一款专为数据库…...
SDXL 1.0电影级绘图工坊:Python入门教程与基础图像处理
SDXL 1.0电影级绘图工坊:Python入门教程与基础图像处理 1. 引言 你是不是也曾经被那些精美的AI生成图片所吸引,想要自己动手创作却不知道从何开始?今天我们就来聊聊如何用Python快速上手SDXL 1.0这个强大的AI绘图工具。 SDXL 1.0是当前最先…...
零代码玩转珞石机械臂:用图形化编程实现咖啡拉花全流程(附配置文件)
零代码玩转珞石机械臂:用图形化编程实现咖啡拉花全流程(附配置文件) 在精品咖啡文化蓬勃发展的今天,一杯带有精美拉花的拿铁不仅能提升产品附加值,更能为顾客创造独特的消费体验。但对于大多数独立咖啡店主而言&#…...
3步掌握BilibiliDown:B站视频下载全攻略与效率提升指南
3步掌握BilibiliDown:B站视频下载全攻略与效率提升指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/…...
一键召唤AI画师!次元画室让角色设计变得如此简单
一键召唤AI画师!次元画室让角色设计变得如此简单 你是否曾经有过这样的经历?脑海中浮现出一个绝妙的角色形象,却苦于无法将它完美呈现;或者为了设计游戏角色,不得不花费重金聘请专业画师;又或者作为小说作…...
