当前位置: 首页 > 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整合
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • golang 发送GET和POST示例
  • Java 网络编程(2):UDP 的使用
  • Java-详解HashMap
  • leetcode-27. Remove Element
  • SQL 难点解决:记录的引用
  • web标准化(下)
  • Zepto.js源码学习之二
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 构造函数(constructor)与原型链(prototype)关系
  • 基于遗传算法的优化问题求解
  • 记一次用 NodeJs 实现模拟登录的思路
  • 类orAPI - 收藏集 - 掘金
  • 聊聊redis的数据结构的应用
  • 前端代码风格自动化系列(二)之Commitlint
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 如何选择开源的机器学习框架?
  • 手写一个CommonJS打包工具(一)
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 小程序开发中的那些坑
  • 优秀架构师必须掌握的架构思维
  • 与 ConTeXt MkIV 官方文档的接驳
  • 阿里云服务器购买完整流程
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​2020 年大前端技术趋势解读
  • ​Spring Boot 分片上传文件
  • #git 撤消对文件的更改
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (03)光刻——半导体电路的绘制
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (算法)求1到1亿间的质数或素数
  • (一)UDP基本编程步骤
  • (一)基于IDEA的JAVA基础12