【LeetCode】20. 有效的括号(Deque的Stack用法)

  今日学习的文章链接和视频链接

leetcode题目地址:20. 有效的括号

 代码随想录题解地址:代码随想录

题目简介

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

有效字符串需满足:

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

看到题目的第一想法(可以贴代码)

1. 经典的数据结构题目

        push所有的左括号类,遇到右括号类则判断栈顶元素是否为其对应的左括号项,选择是否pop,最后判断栈是否为空。

public boolean isValid(String s) {
    Stack<Character> st = new Stack<>();
    char[] c = s.toCharArray();
    for (char i : c){
        if (i == '('|| i == '[' || i == '{'){
            st.push(i);
            System.out.println("push"+i);
        }else if (i == ')'){
            if (st.empty() || st.peek() != '(') return false;
            if (st.peek() == '(') st.pop();
        }else if (i == ']'){
            if (st.empty() || st.peek() != '[') return false;
            if (st.peek() == '[') st.pop();
        }else if (i == '}'){
            if (st.empty() || st.peek() != '{') return false;
            if (st.peek() == '{') st.pop();
        }
    }
    if (st.empty()) return true; else return false;
}

实现过程中遇到哪些困难

看完代码随想录之后的想法

【解题思路】遇到左括号类,push其对应的右括号类,遇到右括号类,判断是否等于栈顶元素,选择是否pop,最后判断栈是否为空。

【想法】

看完视频自己写的ACC:

public boolean isValid(String s) {
    Stack<Character> st = new Stack<>();
    char[] c = s.toCharArray();
    for (char i : c){
        if (i == '('){
            st.push(')');
        }else if (i == '['){
            st.push(']');
        }else if (i == '{'){
            st.push('}');
        }else if (i == ')' || i == ']' || i == '}'){
            if (st.empty() || st.peek() != i){
                return false;
            }else { 
                st.pop(); 
            }
        }
    }
    if (st.empty()) return true; else return false;
}

标准答案

public boolean isValid(String s) {
    Deque<Character> deque = new LinkedList<>();
    char ch;
    for (int i = 0; i < s.length(); i++) {
        ch = s.charAt(i);
        //碰到左括号,就把相应的右括号入栈
        if (ch == '(') {
            deque.push(')');
        }else if (ch == '{') {
            deque.push('}');
        }else if (ch == '[') {
            deque.push(']');
        } else if (deque.isEmpty() || deque.peek() != ch) {
            return false;
        }else {//如果是右括号判断是否和栈顶元素匹配
            deque.pop();
        }
    }
    //最后判断栈中元素是否匹配
    return deque.isEmpty();
}

学习时长


今日收获

Stack类的初始化:

        Deque<Character> deque = new LinkedList<>();

        Stack<Character> st = new Stack<>();

Deque可作Queue,也可作Stack:

public interface Deque<E> extends Queue<E> {
    void addFirst(E e);
    void addLast(E e);
    boolean offerFirst(E e);
    boolean offerLast(E e);
    E removeFirst();
    E removeLast();
    E pollFirst();
    E pollLast();
    E getFirst();
    E getLast();
    E peekFirst();
    E peekLast();
    boolean removeFirstOccurrence(Object o);
    boolean removeLastOccurrence(Object o);
 
    // *** Queue methods ***
    boolean add(E e);
    boolean offer(E e);
    E remove();
    E poll();
    E element();
    E peek();
 
    // *** Stack methods ***
    void push(E e);
    E pop();
    
    // *** Collection methods ***
    boolean remove(Object o);
    boolean contains(Object o);
    public int size();
    Iterator<E> iterator();
    Iterator<E> descendingIterator();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/294734.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期

前言 Certbot是一款免费且开源的自动化安全证书管理工具&#xff0c;由电子前沿基金会&#xff08;EFF&#xff09;开发和维护&#xff0c;是在Linux、Apache和Nginx服务器上配置和管理SSL/TLS证书的一种机制。Certbot可以自动完成域名的认证并安装证书。 一、 安装软件 1.1…

C语言编译器(C语言编程软件)完全攻略(第一部分:什么是编译器?)

介绍常用C语言编译器的安装、配置和使用。 一、什么是编译器&#xff1f; 我们平时所说的程序&#xff0c;是指双击后就可以直接运行的程序&#xff0c;这样的程序被称为可执行程序&#xff08;Executable Program&#xff09;。在 Windows 下&#xff0c;可执行程序的后缀有…

时代变革,亿发进销存引领批发业转型:从‘瞎盲’到高效盈利

2024年&#xff0c;许多传统批发老板们忙得不可开交。抱怨生意难做、年关难熬。 有些老板为了降低成本&#xff0c;开除了一两个店员&#xff0c;结果却发现自己要同时盯着店&#xff0c;又得亲自开单&#xff0c;一天中至少有10个小时被拴在店里&#xff0c;就是为了减少支出…

准博士生教你如何阅读论文

AI方向如何阅读论文 绪论会议整理一篇论文的主要结构AbstractIntroductionRelated WorkApproach(framework名称亦可)ExperimentsImplementation detailsResultsAblation StudyDiscussion Conclusion 如何阅读多篇论文怎样读/写related work怎样读approach结语 绪论 作为一位工…

Linux系统安全

作为一种开放源代码的操作系统&#xff0c;linux服务器以其安全、高效和稳定的显著优势而得以广泛应用。 账号安全控制 用户账号是计算机使用者的身份凭证或标识&#xff0c;每个要访问系统资源的人&#xff0c;必须凭借其用户账号 才能进入计算机.在Linux系统中&#xff0c;提…

Unity之摄像机

一、摄像机类型 1.1 透视摄像机 透视摄像机有近大远小的效果&#xff0c;与我们在现实中看到的效果相同。所以当两个同样大小的物体到摄像机的距离不同时我们看到的大小也会不同。Unity的3D项目中默认使用的就是透视摄像机。 1.2 正交摄像机 正交摄像机没有近大远小的效果&am…

Linux 修改主机名称并通过主机名称访问服务器

一、命令提示符简介 当我们打开终端的时候&#xff0c;我们要输入命令的左边就是命令提示符&#xff0c;如下图&#xff0c;接下来介绍下他们分别代表什么含义 1、root 和 xhf 表示的是当前登录的用户名称。 2、node2 表示的当前的主机名称。 3、~ 表示的是当前的目录 4、# 表示…

BIND DNS 自定义zabbix监控

一、DNS统计计数器 Bind9可以使用rndc stats 命令将相关DNS统计信息存储到工作目录下&#xff0c;默认位置在&#xff1a; statistics-file "/var/named/data/named_stats.txt"; 每当名称服务器执行rndc stats命令&#xff0c;都会统计在统计信息文件最后附加一…

paddlehub 文本检测使用

PaddleHub负责模型的管理、获取和预训练模型的使用。 参考&#xff1a;https://github.com/PaddlePaddle/PaddleHub/tree/develop/modules/image/text_recognition/chinese_text_detection_db_server import paddlehub as hub import cv2 # from utils import cv_show import…

Charles的基础使用教程【Mac】

目录 1.安装 2.抓取https请求的前置操作 2.1安装证书&#xff1a; 2.2、SSL代理设置 3.Charles初识 1.安装 官网Charles下载安装即可&#xff0c;没有什么需要注意的地方 2.抓取https请求的前置操作 2.1安装证书&#xff1a; 未安装证书是这样的&#xff1a; 上述我们可…

BUUCTF--gyctf_2020_borrowstack1

这是一题栈迁移的题目&#xff0c;先看看保护&#xff1a; 黑盒测试&#xff1a; 用户可输入两次内容&#xff0c;接着看看IDA中具体程序流程&#xff1a; 我们看到溢出内容只有0x10的空间给我们布局&#xff0c;这显然是不足以我们布置rop的。因此肯定就是栈迁移了。迁到什么地…

React 入门 - 01

本章内容 目录 1. 简介1.1 初始 React1.2 React 相关技术点1.3 React.js vs Vue.js 2. React 开发环境准备2.1 关于脚手架工具2.2 create-react-app 构建一个 React 项目工程 1. 简介 1.1 初始 React React JS 是 Facebook 在 2013年5月开源的一款前端框架&#xff0c;其带来…

Camtasia2024录屏软件简单实用的4K录制视频软件

Camtasia是一款功能强大的屏幕录制软件&#xff0c;适用于Windows和Mac操作系统。它具有简单的操作界面和丰富的编辑功能&#xff0c;coco玛奇朵可以让你轻松录制和编辑屏幕视频。Camtasia还支持添加文字、图像、动画等元素&#xff0c;同时提供了丰富的特效和滤镜功能&#xf…

Python中的类以及对象 与 self关键字的介绍

Python中的类 类的定义 在Python中,类是一种用户定义的复杂数据类型 类提供了一种组织代码和数据的方式,用来创建现实世界对象的蓝图 一个类,是由成员变量(属性)和函数(类的方法)组成的 |------成员属性 类------||------类的方法定义格式 class Teacher: #-----类名de…

打工人的2.0时代,只需要一副AR眼镜!

在数字化时代&#xff0c;工业行业中的生产效率如何得到提升&#xff1f;工业AR眼镜或许是一个不错的选择。不过工业AR眼镜真的可以协助员工处理工作中所遇到的各种问题吗&#xff1f;我们以制造业、医疗行业、船舶业的不同从业者为例&#xff1a; 假如你是一名制造业从业者&am…

这些流行的K8S工具,你都用上了吗

关注【云原生百宝箱】公众号&#xff0c;获取更多云原生消息 本文介绍了一些流行的 Kubernetes 工具和常见的集群组件。例如 Helm 作为 Kubernetes 应用的包管理器&#xff0c;以及本地开发所需的 Kubernetes 发行版。另外提及了一些常见的集群组件&#xff0c;如集群自动缩放器…

C/C++输入函数总结

1、cin 2、cin.get 3、cin.getline 4、getline 5、gets 6、getchar 1、cin 可以接受单个字符和字符串&#xff0c;但遇空格,"TAB","回车"结束&#xff01;&#xff01;&#xff01; 若不跳过空白字符&#xff0c;使用 noskipws 流控制。 使用方法如…

nacos 2.* 部署在linux服务器无法注册问题

通过sdk注册代码 报错 Exception in thread "main" ErrCode:-401, ErrMsg:Client not connected, current status:STARTING at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:639) at com.alibaba.nacos.common.remote.client…

Python 使用 selenium 进行自动化测试或者协助日常工作

Python 使用 selenium 进行自动化测试 或者协助日常工作&#xff0c;内容如下所示&#xff1a; 1、基础准备 需要准备 Python 环境需要安装 selenium 模块 pip install selenium 需要下载谷歌浏览器驱动程序 &#xff0c;下载地址为 下载对应版本驱动程序 查询谷歌浏览器版本…

STM32疑难杂症

1.keil的奇怪问题 创建的数组分配内存到0x10000000地址的时候,数据总是莫名其妙的出现问题,取消勾选就正常了 stm32f407内部有一个CCM内存,这部分内存只能由内核控制,任何外设都不能够进行访问。这样问题就来了,如果使用keil5进行编程时勾选了这个选项(下图),则编译的…