LeeCode学习记录:20. 有效的括号

2023-11-05

题目及代码

在这里插入图片描述

class Solution {
    public boolean isValid(String s) {
        /*
        1、有效字符串的长度一定为偶数。
        2、遇到的左括号要先闭合,考虑用栈将这个左括号放入栈顶。
        3、当右括号时,可以取出栈顶的左括号并判断它们是否是相同类型的括号。如果不是相同的类型,或者栈中并没有左括号,返回False。
        4、为了快速判断括号的类型,我们可以使用哈希表存储每一种括号。哈希表的键为右括号,值为相同类型的左括号。
        5、在遍历结束后,如果栈中没有左括号,说明我们将字符串中的所有左括号闭合,返回True,否则返回False。
         */
        if (s.length() % 2 == 1) {
            return false;
        }
        Map<Character, Character> pairs = new HashMap<Character, Character>() {{
            put(')', '(');
            put(']', '[');
            put('}', '{');
        }};
        Deque<Character> stack = new LinkedList<>();
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            // 判断是否属于key,即是否为右括号
            if (pairs.containsKey(ch)) {
                // 取出栈顶的左括号并判断它们是否是相同类型的括号。如果不是相同的类型,或者栈中并没有左括号,返回False

                // 这里注释是因为如果第一个是右括号,堆栈为空,则stack.peek()会返回null,导致null.equals()报错
                // if (!stack.peek().equals(pairs.get(ch)) || stack.isEmpty()) {
                if (stack.isEmpty() || !stack.peek().equals(pairs.get(ch))) {
                    return false;
                }
                else {
                    stack.poll();
                }
            }
            else {
                stack.push(ch);
            }
        }
        // return true;
        return stack.isEmpty(); // 牛!严谨判断最后是否堆栈全部弹出
    }
}

收获总结

  • Deque代替Stack【待更新】:
  • 成对出现的判断可以利用哈希表实现
  • 灵活运用数据结构:先进先出 = 队列、先进后出 = 堆栈
  • ||和&&的短路运算——true || xx 和 false && xx的xx判断或操作是不走的,例如题中应该先判断isEmpty()就顺便可以避免堆栈为空导致的null.equals()空指针问题
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeeCode学习记录:20. 有效的括号 的相关文章

  • 文件目录大小

    题目描述 一个文件目录的数据格式为 目录id 本目录中文件大小 子目录id列表 其中目录id全局唯一 取值范围 1 200 本目录中文件大小范围 1 1000 子目录id列表个数 0 10 例如 1 20 2 3 表示目录1中文件总大小是2

随机推荐

  • 解决 vba 报错:要在64位系统上使用,请检查并更新Declare 语句

    将错误处的 Declare 替换成 Declare PtrSafe 即可
  • java正则

    一 Pattern类和Matcher类 java util regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包 它包括两个类 Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表
  • docker 安装向量数据库 Milvus

    Miluvs 官网为 www milvus io Milvus 向量数据库能够帮助用户轻松应对海量非结构化数据 图片 视频 语音 文本 检索 单节点 Milvus 可以在秒内完成十亿级的向量搜索 请参考 在线教程 分布式架构亦能满足用户的水
  • LSTM模型预测新冠

    LSTM是RNN的改进型 传统RNN模型会随着时间区间的增长 对早期的因素的权重越来越低 有可能会损失重要数据 而LSTM模型通过遗忘门 输入门 输出门三个逻辑 来筛选和保留数据 原理详解可以参考如何从RNN起步 一步一步通俗理解LSTM这
  • (二叉)树的遍历

    树 包括图 在遍历时都存在两种方式 深度优先遍历和广度优先遍历 树 一定有一个根节点 而图 没有根节点 但图中的任意节点都可以作为根节点使用 当然该节点一定要有边 否则没有意义 深度优先遍历 访问当前节点 将当前节点的children作为子
  • spacemacs删除行尾无意义的空格符号

    SPC SPC delete trailing whitespace 或者 SPC x d w
  • 2019年全球安全态度调查:越来越多的受害者向勒索软件支付赎金

    根据网络安全公司CrowdStrike 发布的 2019年全球安全态度调查 的数据 在供应链攻击后 危害黑客以支付赎金的组织总数从14 增长到39 与去年同期相比翻了一番 其中最典型的是英国 2019年 遭受勒索软件攻击并支付勒索赎金的组织
  • fastadmin public js 内 selectpage 联动下拉

    js 页面 define jquery bootstrap backend table form selectpage function undefined Backend Table Form var Controller index f
  • 如何使用Git工具克隆GitHub仓库到本地

    首先 确保你已经在本地安装了Git 如果没有安装 可以前往Git官方网站 https git scm com 下载并安装适合你操作系统的版本 在本地文件夹打开Git Bash 如果你使用Windows系统 在GitHub上找到你想要克隆的仓
  • UE Cook遇到的一些问题

    UE Cook是什么 简单来说 把UE资源 比如uasset umap等转换成平台能识别的资源类型 Cook中遇到的报错 找不到文件 说明你有些plugin没有加入到当前 Project uproject中去 UATHelper Cooki
  • 35岁,一个团队leader,从工作满8年的公司离职,选择重新尝试新机会,或许35岁才是起点。

    目录 面试 1 年龄大找工作一定要有目标 不能太随便 2 代码能力是整个IT行业的核心技能 也是对整个行业从业者的要求 3 沟通表达很重要 把自己做过的事情做到极致 然后能讲出来 4 心态要好 5 机会总是留给有准备的人 勿浮躁 先沉淀 厚
  • 多态语法c++(自学笔记一)

    多态中的纯虚函数 使用多态时 当子类继承父类之后 一般来说对于父类只是作为提供相应的成员变量和成员函数的一个集合 在实际项目中 如果想要修改某一部分的功能 按照以往普通的类的写法 就需要修改类中的代码 也可以说是源码 这样会显得很不方便和不
  • Spring Boot 日志处理

    Spring Boot 日志处理 Spring Boot 是一个非常流行的 Java 开发框架 它提供了简洁的配置和强大的开发工具 日志是应用程序中必不可少的一部分 因为它可以帮助开发人员进行调试和故障排除 Spring Boot 提供了多
  • 非常详细图文JDK和Tomcat安装和配置的图文教程

    想用Tomcat作为服务器 必须分以下两步 首先要配置好JDK的环境变量 再去下载Tomcat的压缩包 一 下载 安装JDK 并且配置好环境变量 1 下载地址 http www oracle com technetwork java jav
  • springboot连接不上redis的三种解决方案

    第一种 查看防火墙是否打开6379端口 查看防火墙状态 systemctl status firewalld 如果防火墙没有启动的话 可以选择直接看后面两种方法 或者就是打开防火墙 然后继续下面的步骤 开启端口 firewall cmd z
  • 基于java网上图书销售系统的设计与实现(含源文件)

    欢迎添加微信互相交流学习哦 项目源码 https gitee com oklongmm biye 1引言 随着Internet国际互联网的发展 越来越多的企业开始建造自己的网站 基于Internet的信息服务 商务服务已经成为现代企业一项不
  • RPMB说明与使用(Replay Protected Memory Block)

    1 什么是RPMB 首先RPMB是repaly protected memory block 从字面意思理解就是一个回放保护的存储区域 这个区域是EMMC或者UFS上的一个区域 这个区域可以读 可以写 但是读和写是受到访问控制和回放保护的
  • 微信的订阅消息发送失败,提示code:47003,msg:argument invalid! data.thing3.value invalid

    问题 通过微信的API发送订阅消息失败了 就是发服务通知 服务通知如下所示 错误提示如下 An highlighted block 2021 07 27 09 23 26 828 INFO xx WechatMsgServiceImpl L
  • 一次因调用文件方法错误导致run.py调用不了test的过程

    我的项目中需要在一个 py中调用另一个文件夹的 py 最开始用的方法是 导入sys包 然后使用sys path append 存储路径 import unittest 导包 from selenium import webdriver fr
  • LeeCode学习记录:20. 有效的括号

    题目及代码 class Solution public boolean isValid String s 1 有效字符串的长度一定为偶数 2 遇到的左括号要先闭合 考虑用栈将这个左括号放入栈顶 3 当右括号时 可以取出栈顶的左括号并判断它们