每天一道leetcode:20.有效的括号(简单;栈的经典题目)

news2024/12/19 15:19:40

⭐今日份题目

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

有效字符串需满足:

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

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

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

示例1

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

示例2

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

示例3

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

提示

  • 1 <= s.length <= 104

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

⭐题目思路

这里还是提取一下题目的特征点:

  • 闭合

  • 按顺序

  • 每个左(右)对应一个右(左)

先考虑明面上的错误情况:

  • 只有左(右)

  • 左右不对应

解题思路是使用,栈的特点是先进后出,完全符合该模式。⭐基本过程是:当我们遇到左括号时,将其压入栈;遇到右括号时,从栈中取出一个符号看是否配对就好

深入来看,还要考虑括号嵌套问题,不需要担心当前右括号需要跨越几个正常的括号组才能找到左括号的问题,如 " { [ ] ) " ,因为,正常的括号组一定早已经经历了配对,所以每次只需要判断栈顶的是否是对应的左括号就好。

该题目是栈相关的简单、经典题目,初学的同学们可以多看几遍,多做几次。

⭐stack补充知识

这里再简单补充一下STL中stack的使用方法。

栈是先进后出,后进先出的数据结构,使用方法主要包括:

//声明
stack<int> s;
//指定底层容器的栈
stack<int,vector<int> > s;
//入栈
s.push(1);
//访问栈顶
s.top();
//从栈顶清除一个元素(只能从栈顶清除)
s.pop();
//判断栈中是否还有元素
s.empty();//无元素的话,empty函数会返回true
//判断栈的元素数量
s.size();
​
//清空栈中的元素
for(int i=s.size();i;i--) s.pop();

⭐代码

class Solution 
{
public:
    bool isValid(string s) 
    {
        stack<char> p;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]=='('||s[i]=='['||s[i]=='{') p.push(s[i]);
            else if(s[i]==')')
            {
                if(p.empty()) return false;
                char cur=p.top();
                p.pop();
                if(cur!='(') return false;       
            }
            else if(s[i]==']')
            {
                if(p.empty()) return false;
                char cur=p.top();
                p.pop();
                if(cur!='[') return false;       
            }
            else if(s[i]=='}')
            {
                if(p.empty()) return false;
                char cur=p.top();
                p.pop();
                if(cur!='{') return false;       
            }
        }
        if(!p.empty()) return false;
        return true;
    }
};

提交结果

我的代码的内存消耗还有待改进,欢迎大家提供更高效的代码,如果过后有更优化的思路我还会继续更新的,大家评论区见!

点赞收藏不迷路⭐~

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

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

相关文章

【数据结构与算法设计】上机课习题一

基础知识 勾画 1.存储结构是逻辑结构的&#xff08;&#xff09;实现 2.一个算法的时空性能是指该算法的&#xff08;&#xff09;和&#xff08;&#xff09; 3.在一般算法下一个算法的事件复杂性是&#xff08;&#xff09;的函数 4.用python设计一个算法&#xff0c;计算 …

输入文章id,爬取小红书某文章下所有评论

import requests import time import csvf open(小红书评论.csv,mode a,encodingutf-8,newline) csv_writer csv.DictWriter(f,fieldnames[内容,点赞数量,发布时间,昵称,头像链接,用户id]) csv_writer.writeheader()def spider(url):headers {"Cookie":"abR…

程序员竟然还有职业规划手册?

《程序员职业规划手册》不是一本具体的书&#xff0c;而是由前阿里技术总监雪梅老师讲授的一个专栏课程&#xff0c;总共有20讲&#xff0c;内容基本都是图片和文字形式&#xff0c;也有对应的语音讲述。 回顾了下毕业工作的这几年&#xff0c;我买过很多学习课程&#xff0c;…

【Python】进阶学习:pandas--read_csv()用法详解

&#x1f680;【Python】进阶学习&#xff1a;pandas–read_csv()用法详解&#x1f680; &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教…

Windows服务器:通过nginx反向代理配置HTTPS、安装SSL证书

先看下效果&#xff1a; 原来的是 http&#xff0c;配置好后 https 也能用了&#xff0c;并且显示为安全链接。 首先需要 SSL证书 。 SSL 证书是跟域名绑定的&#xff0c;还有有效期。 windows 下双击可以查看相关信息。 下载的证书是分 Apache、IIS、Tomcat 和 Nginx 的。 我…

redis批量删除指定前缀key四种方法(收藏)

这篇文章主要介绍了redis批量删除指定前缀key四种方法。 目录 redis批量删除指定前缀key四种方法 第一种&#xff1a;第二种&#xff1a;第三种&#xff1a;第四种&#xff1a;Redis 如何批量删除指定前缀的Key 编码方式 redis批量删除指定前缀key四种方法 第一种&#xff…

【题解】—— LeetCode一周小结9

【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结8 26.二叉搜索树的范围和 题目链接&#xff1a;938. 二叉搜索树的范围和 给定二叉搜索树的根结点 root&#xff0c;返回值位于范围 [low, high] 之间的所有结点的值的和。 示例 1&#xff1a; 输…

SpringBoot-yaml语法

1.概念 在Springboot的项目中&#xff0c;配置文件有以下几种格式&#xff1a; Application.propertiesApplication.yamlApplication.yml 其中官方推荐我们使用yaml的格式(因为能表示的数据类型很多样) 2.基本语法 # yaml形式的配置文件# 普通的key-value&#xff08;分号之后…

windows环境下Grafana+loki+promtail入门级部署日志系统,收集Springboot(Slf4j+logback)项目日志

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

MyBatis操作数据库(XML方式)

MyBatis是一个持久层框架&#xff0c;和Spring没有任何关系&#xff0c;可以用来简化数据库的操作&#xff01; 创建工作&#xff1a; 创建Spring Boot工程&#xff0c;并导入MyBatis的起步依赖&#xff0c;Mysql的依赖等 配置数据 #配置数据库的连接字符串 spring:datasour…

ruoyi 图片等文件资源读取

老是忘&#xff0c;记录一下 ResourcesConfig 文件下 /** 本地文件上传路径 */ registry.addResourceHandler(Constants.RESOURCE_PREFIX "/**").addResourceLocations("file:" RuoYiConfig.getProfile() "/"); /*** 资源映射路径 前缀*/ …

C++使用工具进阶(LOG输出、堆栈跟踪、代码结构、code review)

0. 简介 对于C&#xff0c;无论是大学生还是算法工程师都是非常需要学习并使用的一门语言&#xff0c;而C不像python、rust一样简单好用。不单单是在嵌套复杂代码后的逻辑还是各种类和堆栈的管理&#xff0c;都是非常头疼的问题。一般来说对于LOG类很多都是使用GLOG、而堆栈跟…

STM32 (1)

1.基本信息 stm32是由ST公司生产的一种32位微控制器&#xff08;单片机&#xff09;。 1.1 各种型号 stm32是32位单片机的总称&#xff0c;有多种不同的系列。 32即用32个比特位表示一个地址&#xff0c;寻址范围&#xff1a;0x00000000 --0xffffffff (4GB) 1.2 存储密度 …

本地如何配置支付宝模拟支付场景并结合内网穿透实现公网环境调试开发?

文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级子域名8. 测试使用固定二级子域名访问 前言 在沙箱环境调试支付SDK的时候&#xff0c;往往沙箱环境部署在本地&#xff0c;局限性大&#xff0c;在沙箱环境…

[环境配置]ssh连接报错“kex_exchange_identification: read: Connection reset by peer”

已经被VScode ssh毒死好几次了&#xff0c;都是执行命令意外中断&#xff0c;然后又VSCode里连不上、本机Terminal也连不上了。。。 重启远程服务器&#xff0c;VSCode可以连上了&#xff0c; 系统ssh还是不行&#xff0c;报错“kex_exchange_identification: read: Connecti…

数字化转型对企业有什么意义

降本增效&#xff0c;提高生产力 数字化转型可以引入自动化和智能化技术、帮助企业优化流程、减少人工操作和错误&#xff0c;提高工作效率和生产力。例如&#xff0c;使用机器人流程自动化 (RPA) 可以自动执行重复性任务&#xff0c;使员工能够专注于更具价值的工作。除了通过…

YOLOv5独家原创改进:特征融合涨点篇 | 广义高效层聚合网络(GELAN) | YOLOv9

💡💡💡本文独家改进:即结合用梯度路径规划(CSPNet)和(ELAN)设计了一种广义的高效层聚合网络(GELAN),高效结合YOLOv5,实现涨点。 将GELAN添加在backbone和head处,提供多个yaml改进方法 💡💡💡在多个私有数据集和公开数据集VisDrone2019、PASCAL VOC实现…

5.测试教程 - 进阶篇

文章目录 1.按测试对像划分1.1**界面测试**1.2**可靠性测试**1.3**容错性测试**1.4**文档测试**1.5**兼容性测试**1.6**易用性测试**1.7**安装卸载测试**1.8**安全测试**1.9**性能测试**1.10**内存泄漏测试** 2.按是否查看代码划分2.1黑盒测试(Black-box Testing)2.2白盒测试(W…

获取properties二个键值对的值

配置文件&#xff1a; 将属性文件中的值赋给Java类的成员变量&#xff1a; 测试方法&#xff1a; GetMapping("/test1") public String test1(String key) {JSONObject jsonUrl JSONObject.parseObject("{"url"}");System.out.println(" …

计算机网络-网络安全(一)

1.网络安全威胁和漏洞类型&#xff1a; 窃听 假冒 重放 流量分析 破环完整 病毒 木马 诽谤 非授权访问 拒绝服务 漏洞&#xff1a;物理、软件、不兼容、其他等。 2.网络安全信息数据五大特征&#xff1a; 完整性&…