当前位置: 首页 > news >正文

【栈和队列OJ】一、有效的括号

文章目录

  • 题目链接
  • 思路
  • 代码实现

题目链接

Leetcode链接:20. 有效的括号

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

有效字符串需满足:

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 ‘()[]{}’ 组成

思路

  • 遍历字符串,若为左括号,入栈
  • 若为右括号,首先判断栈是否为空,为空直接返回false,若不为空,取栈顶元素,若栈顶元素是与之对应的左括号则出栈,否则返回false
  • 最后遍历完字符串之后,判断栈是否为空,为空返回true,否则返回false

请添加图片描述
在这里插入图片描述
请添加图片描述
请添加图片描述

代码实现

class Solution {
public:
    bool isValid(string s) {
		
        stack<char> mystack;
        //遍历字符串
        for(int i = 0; i < s.size(); ++i)
        {
        	//为左括号入栈
            if(s[i] == '(' || s[i] == '{' || s[i] == '[')
            {
                mystack.push(s[i]);
            }
            else
            {
                //遍历到右括号,如果栈为空,则不匹配
                if(mystack.empty())
                    return false;
                //不为空
                char top = mystack.top();
                mystack.pop();

                if(s[i] == ')' && top != '('
                || s[i] == '}' && top != '{'
                || s[i] == ']' && top != '[')
                {
                    return false;
                }
                
            }
        }
        //最后判断栈是否为空,如果栈为空,则证明这是一个有效的字符串      
        return mystack.empty();
    }
};

相关文章:

  • 行业竞争分析及发展动向
  • c++现代特性
  • 【学习笔记】go协程和通道
  • 十二、bootstrap前端开发框架
  • USACO Training 1.3 Milking Cows
  • < Linux > 进度条小程序 + git三板斧
  • 惊险的十天
  • 【数据结构初阶】堆堆的实现堆排序TOP-K
  • 自动驾驶技术综述1:自动驾驶算法软件架构介绍
  • PySpark数据分析基础:pyspark.mllib.regression机器学习回归核心类详解(一)+代码详解
  • 线程池-手写线程池
  • TCP延申
  • C进阶——指针详解
  • Serverless 架构下的 AI 应用开发:入门、实战与性能优化
  • 网络整体框架介绍
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Docker下部署自己的LNMP工作环境
  • E-HPC支持多队列管理和自动伸缩
  • gcc介绍及安装
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Intervention/image 图片处理扩展包的安装和使用
  • java正则表式的使用
  • jdbc就是这么简单
  • LeetCode29.两数相除 JavaScript
  • nodejs调试方法
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 基于HAProxy的高性能缓存服务器nuster
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 如何设计一个微型分布式架构?
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 我看到的前端
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 因为阿里,他们成了“杭漂”
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (day6) 319. 灯泡开关
  • (LeetCode C++)盛最多水的容器
  • (附源码)计算机毕业设计ssm电影分享网站
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (四)鸿鹄云架构一服务注册中心
  • (译)2019年前端性能优化清单 — 下篇
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .NET delegate 委托 、 Event 事件
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET中的十进制浮点类型,徐汇区网站设计
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [20171101]rman to destination.txt