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

LeetCode:20. 有效的括号——栈和队列

🍎道阻且长,行则将至。🍓

🌻算法,不如说它是一种思考方式🍀


算法专栏: 👉🏻123


一、🌱20. 有效的括号

  • 题目描述:给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
    有效字符串需满足:
    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
    每个右括号都有一个对应的相同类型的左括号。

  • 来源:力扣(LeetCode)

  • 难度:简单

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

  • 示例 1:
    输入:s = “()”
    输出:true
    示例 2:
    输入:s = “()[]{}”
    输出:true
    示例 3:
    输入:s = “(]”
    输出:false

🌴解题

题目要求判断字符串是不是合法括号组合,也就是找到一个左括号,还要在后面有一个可以连接的有括号。这时候我们使用栈这种先进后出数据结构就很方便,当左括号进栈,只有匹配到下一个要进栈的是右括号,也就是找到一个匹配括号,将其弹出栈。而如果进栈一个不能弹出栈的右括号,这时候肯定括号存在交叉或者不匹配,可以提前退出返回false。只有当最后栈为空才返回true,否则返回false

使用栈

为了熟悉栈,我们可以实现一个栈及其方法:

class MyStack {
    List<String> mystack=new ArrayList<>();
    public MyStack() {
    }
    public void push(String x) {//进栈
        mystack.add(x);
    }
    public String pop() {//弹出栈顶
        String x=mystack.get(mystack.size()-1);
        mystack.remove(mystack.size()-1);
        return x;
    }
    public String peek() {//栈顶
        return mystack.get(mystack.size()-1);
    }
    public boolean empty() {
        return mystack.isEmpty();
    }
}
  • code:
class Solution {
    public boolean isValid(String s) {
        MyStack stack=new MyStack();
        for (int i = 0; i < s.length(); i++) {
            if(!stack.empty()){//栈非空,就可以判断括号匹配
                switch(stack.peek()){
                    case "(":
                        if(s.charAt(i)==')')stack.pop();
                        else
                            stack.push(String.valueOf(s.charAt(i)));break;
                    case "[":
                        if(s.charAt(i)==']')stack.pop();
                        else
                            stack.push(String.valueOf(s.charAt(i)));break;
                    case "{":
                        if(s.charAt(i)=='}')stack.pop();
                        else
                            stack.push(String.valueOf(s.charAt(i)));break;
                    default:return false;
                }
            }else
            stack.push(String.valueOf(s.charAt(i)));
        }
        if(!stack.empty())
            return false;
        return true;
    }
}

在这里插入图片描述


行路难!行路难!多岐路,今安在?
长风破浪会有时,直挂云帆济沧海。

返回第一页。☝


☕物有本末,事有终始,知所先后。🍭

🍎☝☝☝☝☝我的CSDN☝☝☝☝☝☝🍓

相关文章:

  • 企业引用CRM管理系统软件有什么作用?
  • 在U盘上运行的 Windows
  • Java设计模式(九)—— 中介者模式
  • HTML5支持的视频文件格式和音频文件格式有哪些?
  • 【图神经网络】10分钟掌握图神经网络及其经典模型
  • 【Axure教程】鼠标滚动上下翻页效果
  • Qt 自定义日志类总结
  • 算法学习|动态规划 LeetCode 416. 分割等和子集
  • Scala泛型(泛型方法,泛型类,泛型特质,上下界,协变、逆变、非变)
  • C/C++字符串
  • 基于Python GDAL库实现图像的几何校正详细教程
  • SpringBoot接参注解与校验失败后的三种异常
  • 【C语言学习】变量和数据类型
  • 【Vue2从入门到精通】详解Vue.js的15种常用指令及其使用场景
  • SpringMVC(8)——SSM整合
  • Angular 4.x 动态创建组件
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • create-react-app做的留言板
  • es6要点
  • es的写入过程
  • Git学习与使用心得(1)—— 初始化
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • pdf文件如何在线转换为jpg图片
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Redis 中的布隆过滤器
  • Spring声明式事务管理之一:五大属性分析
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端技术周刊 2019-02-11 Serverless
  • 如何选择开源的机器学习框架?
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 我感觉这是史上最牛的防sql注入方法类
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #13 yum、编译安装与sed命令的使用
  • #laravel 通过手动安装依赖PHPExcel#
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (第27天)Oracle 数据泵转换分区表
  • (二)fiber的基本认识
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (三)elasticsearch 源码之启动流程分析
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (原)Matlab的svmtrain和svmclassify
  • ***监测系统的构建(chkrootkit )
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET Reactor简单使用教程
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET/C# 使用 SpanT 为字符串处理提升性能