当前位置: 首页 > 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整合
  • ECMAScript6(0):ES6简明参考手册
  • express.js的介绍及使用
  • Javascript编码规范
  • js ES6 求数组的交集,并集,还有差集
  • SQL 难点解决:记录的引用
  • Vue 重置组件到初始状态
  • windows下如何用phpstorm同步测试服务器
  • yii2权限控制rbac之rule详细讲解
  • 爱情 北京女病人
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 编写符合Python风格的对象
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 规范化安全开发 KOA 手脚架
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 如何设计一个比特币钱包服务
  • 无服务器化是企业 IT 架构的未来吗?
  • 学习笔记:对象,原型和继承(1)
  • 一道面试题引发的“血案”
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 最近的计划
  • !$boo在php中什么意思,php前戏
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (二)斐波那契Fabonacci函数
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (实战篇)如何缓存数据
  • (原創) 未来三学期想要修的课 (日記)
  • (转)Windows2003安全设置/维护
  • ***通过什么方式***网吧
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET Core 项目指定SDK版本
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 分布式技术比较
  • .net分布式压力测试工具(Beetle.DT)
  • ?