20.有效的括号

原题链接:20.有效的括号

看到这种需要双双匹配的题目,就感觉可以使用栈来做
题目要求是:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
3.每个右括号都有一个对应的相同类型的左括号。

还需要注意
栈为空的时候插入的是右括号的情况该怎么办?
如果栈里只有左元素没有右元素该怎么办?
匹配完后栈不为空怎么办?
注意好以上几点,配合上题目,利用栈就可以写出相关代码了

全代码:

class Solution {
public:bool isValid(string s) {stack<char> left;for(int i = 0; i < s.size(); i++){//遍历字符串 开始匹配if(s[i] == '(' || s[i] == '[' || s[i] == '{'){//往栈内存储左括号left.push(s[i]);}else if((s[i] == ')' || s[i] == ']' || s[i] == '}') && (!left.empty())){//1.栈不为空,插入的是右括号,则需要和存储左括号的栈进行匹配if((s[i] == ')' && left.top() == '(') && (!left.empty())){//栈里有匹配的左元素且栈不为空,那么代表有一对匹配的括号了,弹出栈顶元素,进入下一个s[i]判断left.pop();}else if((s[i] == ']' && left.top() == '[') && (!left.empty())){left.pop();}else if((s[i] == '}' && left.top() == '{') && (!left.empty())){left.pop();}else{//压入的右括号和左括号不匹配,又或者是压入右括号时栈为空,则返回falsereturn false;}}else{//2.栈为空,插入的是右括号,则代表不是按顺序闭合,直接返回falsereturn false;}}if(left.size() == 0){//到最后栈为空,则代表所有括号都进行了匹配,返回truereturn true;}//不为空,则代表没有全部进行匹配 返回falsereturn false;}
};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQFoundation

RocketMQFoundation 一. RocketMQ 消息队列1.1 初始化1.1.1 下载 4.9.41.1.2 配置环境变量1.1.3 启动1.1.3.1 启动 mqnamesrv.cmd1.1.3.2 启动 mqbroker.cmd -n localhost:98761.1.3.3 封装启动命令1.1.3.4 占用内存过高1.1.4 rocketmq-dashboard 仪表盘 可视化界面1.1.4.1 启动…

Python基础入门例程40-NP40 俱乐部的成员(运算符)

最近的博文&#xff1a; Python基础入门例程39-NP39 字符串之间的比较&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程38-NP38 牛牛的逻辑运算&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程37-NP37 不低于与不超过&#xff08;运算符&#xff0…

c++中httplib使用

httplib文件链接:百度网盘 请输入提取码 提取码:kgnq json解析库:百度网盘 请输入提取码 提取码:oug0 一、获取token 打开postman, 在body这个参数中点击raw,输入用户名和密码 然后需要获取到域名和地址。 c++代码如下: #include "httplib.h" #in…

Linux环境基础开发工具使用(二)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、Linux项目自动化构建工具-make/Makefile1、背景2、实例代码3、依赖关系4、依赖方法5、原理…

pytorch3D Windows下安装经验总结

一、说明及准备工作 最近在安装pytorch3D的时候遇到了很多问题&#xff0c;查了很多博客&#xff0c;但发现讲的都不太全&#xff0c;所以特将自己的及收集到的安装过程经验总结如下。我是在Anaconda中虚拟环境下安装的。 1.1准备工作 官方安装教程如下&#xff1a;https://…

java入门-JDK下载与安装

1、下载jdk Java 的产品叫JDK&#xff08;Java Development Kit: Java开发者工具包&#xff09;&#xff0c;必须安装JDK才能使用java 1、官网地址 https://www.oracle.com/java/ https://www.oracle.com/java/technologies/downloads/ 目前比较稳定的版本为 JDK17. 我们就安…

亚马逊云科技大语言模型下的六大创新应用功能

目录 前言 亚马逊云科技的AI创新应用 ​编辑 Amazon CodeWhisperer Amazon CodeWhisperer产品的优势 更快地完成更多工作 自信地进行编码 增强代码安全性 使用收藏夹工具 自定义 CodeWhisperer 以获得更好的建议 如何使用Amazon CodeWhisperer 步骤 1 步骤 2 具体…

【Vue基础-实践】数据可视化大屏设计(林月明螺蛳粉文化公司单量数据大屏)

目录 一、知识整理 1、页面自适应 2、下载插件px to rem & rpx 3、关于padding与margin 4、下载echarts 5、下载axios 6、experss官网接口创建 7、创建路由 8、api接口创建 9、设置基准路径 10、跨域设置 11、图表设置 12、地图数据引用 13、设置地图效果 二、…

C++多线程编程:其一、thread类概述

thread是C11版本中出现的线程对象&#xff0c;可以让程序员非常方便地创建线程。 非空的thread对象创建以后&#xff0c;线程就会自动运行起来。简单地理解&#xff0c;一个线程对象中会传入一个函数指针&#xff0c;之后编译器会构造一个栈&#xff0c;将这个函数指针压栈。函…

3D高斯泼溅(Splatting)简明教程

在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D场景编辑器 3D 高斯泼溅&#xff08;Splatting&#xff09;是用于实时辐射场渲染的 3D 高斯分布描述的一种光栅化技术&#xff0c;它允许实时渲染从小图像样…

wandb 安装本地部署使用教程

1、官网注册 wandb.ai是一个为机器学习开发者提供的开发工具平台&#xff0c;可以帮助用户跟踪实验&#xff0c;管理和版本数据&#xff0c;以及与团队协作&#xff0c;从而更专注于构建最佳模型。 wandb官网&#xff1a; https://wandb.ai 首先我们打开官网注册号自己的账号并…

python 使用absl包

"absl" 是 Google 开发的一个 Python 软件包&#xff0c;用于提供一些常见的 Python 编程功能和工具&#xff0c;以改善代码的可读性、可维护性和性能。absl 是 "abseil-py" 的一部分&#xff0c;它是 C Abseil 库的 Python 版本。C Abseil 库是 Google 内…

flex布局实现左侧宽度固定,右边占满剩余宽度

左侧宽度固定&#xff0c;右边占满剩余宽度 <div class"ppp"><div class"left">A</div><div class"right">B</div> </div>.ppp {display: flex;flex-direction: row;justify-content: space-between;flex-…

springboot(ssm 疫情管理系统 Java(codeLW)

springboot(ssm 疫情管理系统 Java(code&LW) 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09; 数据库工…

spring boot 定时任务@Scheduled(cron = ““)不可用时并且注入失败时——笔记

以下方案是本人使用定时任务时Service注入失败的解决方案 在 Spring Boot 中执行定时任务时&#xff0c;你可以注入并直接调用 Service 中的方法&#xff0c;就像在普通的业务逻辑中一样。 以下是执行定时任务时调用 Service 的步骤&#xff1a; 创建一个 Service 类&#xf…

JAVA深化篇_32—— 线程使用之线程同步synchronized语法结构【附有详细说明及代码】

线程同步 什么是线程同步 同步问题的提出 现实生活中&#xff0c;我们会遇到“同一个资源&#xff0c;多个人都想使用”的问题。 比如&#xff1a;教室里&#xff0c;只有一台电脑&#xff0c;多个人都想使用。天然的解决办法就是&#xff0c;在电脑旁边&#xff0c;大家排队…

[自动化运维工具] Ansible的简单介绍与常用模块详解

文章目录 1. Ansible概述1.1 简介1.2 Ansible的特性1.3 Ansible的组件构成1.4 Ansible的工作原理 2. Ansible环境部署2.1 前置准备2.2 安装ansible2.3 查看基本信息2.4 配置远程主机清单 3. Ansible的常用模块3.1 ansible的基础命令格式3.2 Command模块3.2.1 基本格式和常用参数…

通过51单片机控制28byj48步进电机按角度正反转旋转

一、前言 本项目基于STC89C52单片机&#xff0c;通过控制28BYJ-48步进电机实现按角度正反转旋转的功能。28BYJ-48步进电机是一种常用的电机&#xff0c;精准定位和高扭矩输出&#xff0c;适用于许多小型的自动化系统和机械装置。 在这个项目中&#xff0c;使用STC89C52单片机…

跟着Nature Communications学作图:纹理柱状图+添加显著性标签!

&#x1f4cb;文章目录 复现图片设置工作路径和加载相关R包读取数据集数据可视化计算均值和标准差方差分析组间t-test 图a可视化过程图b可视化过程合并图ab 跟着「Nature Communications」学作图&#xff0c;今天主要通过复刻NC文章中的一张主图来巩固先前分享过的知识点&#…

Git同时配置Gitee和GitHub

Git同时配置Gitee和GitHub 一、删除原先ssh密钥二、生成密钥 这里的同时配置是针对于之前配置过单个gitee或者github而言的&#xff0c;如果需要看git从安装开始的配置&#xff0c;则可以看这一篇文章 git安装配置教程 一、删除原先ssh密钥 在C盘下用户/用户名/.ssh文件下找到…