【CT】LeetCode手撕—20. 有效的括号

news2024/10/6 22:25:45

题目

  • 原题连接:20. 有效的括号

1- 思路

模式识别

  • 模式1:括号左右匹配 ——> 借助栈来实现 ——> Deque<Character> deque = new LinkedList<>()
  • 模式2:顺序匹配 ——> 用 if 判断

具体思路

  • 1.遇到左括号
    • 直接入栈相应的右括号
  • 2.不匹配情况
    • **① 左括号多:**此时 栈 deque.isEmpty() ,因此该条件下返回 false
    • ② 括号相等但括号顺序不对:此时 s.charAt(i) != deque.poll(),因此此条件下返回 false
    • ③ 右括号多:此时 在遍历完 deque 之后,deque.isEmpty() 结果为 false

2- 实现

⭐20. 有效的括号——题解思路

在这里插入图片描述

class Solution {
    public boolean isValid(String s) {
        Deque<Character> st = new LinkedList<>();

        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(') {
                st.push(')');
            } else if (s.charAt(i) == '{') {
                st.push('}');
            } else if (s.charAt(i) == '[') {
                st.push(']');
            } else if (st.isEmpty() || s.charAt(i) != st.peek()) {
                return false;
            } else {
                st.pop();
            }

        }
        return st.isEmpty();
    }

}

3- ACM实现

public class isValid {


    public static boolean isValid(String s){
        int n = s.length();
        Deque<Character> deque = new LinkedList<>();
        for(int i = 0 ; i < n;i++){
            if(s.charAt(i)=='['){
                deque.add(']');
            }else if(s.charAt(i) == '{'){
                deque.add('}');
            }else if(s.charAt(i) == '('){
                deque.add(')');
            }else if(deque.isEmpty() || s.charAt(i) != deque.peek()){
                return false;
            }else{
                deque.pop();
            }
        }
        return deque.isEmpty();
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入括号字符串");
        String str = sc.nextLine();
        System.out.println("是否为有效括号"+isValid(str));
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java面试】二十二、JVM篇(下):JVM参数调优与排查

文章目录 1、JVM的参数在哪里设置2、常见的JVM调优参数有哪些3、常见的JVM调优工具有哪些4、Java内存泄漏的排查思路5、CPU飙高的排查思路 1、JVM的参数在哪里设置 war包部署&#xff0c;在tomcat中设置&#xff0c;修改TOMCAT_HOME/bin/catalina.sh 文件 jar包启动&#xff0…

华为IPD体系中三大流程之IPD流程的六个阶段和七个评审点介绍

概念 IPD集成产品开发&#xff0c;英文是IntegratedProduct Development&#xff0c;是一整套科学的研发创新管理方法论&#xff0c;将产品经营管理思想和理念置入到新产品开发和产品管理过程中&#xff0c;因此IPD是不仅是一套研发管理体系&#xff0c;更是一套产品经营管理体…

Z世代职场价值观的重塑:从“班味”心态到个人成长的追求

近日&#xff0c;社交平台Soul APP联合上海市精神卫生中心&#xff08;俗称“宛平南路600号”&#xff09;发布《2024年Z世代职场心理健康报告》&#xff08;下称“报告”&#xff09;&#xff0c;发现今天的年轻人正以其独特的价值观和行为模式&#xff0c;重新定义成功与成就…

安装VSCode创建注册表出错,RegCreateKey错误码5

今天对VSCode进行做更新安装&#xff0c;谁知道安装到最后弹出下面这么个错误 找到windows下管用的一种解决办法&#xff1a; winR打开运行&#xff0c;输入 regedit找到错误提示中的路径&#xff0c;HKEY_CURRENT_USER\Software\Classes\VSCode.class\open (图中的错误注册表…

边学边赛拿冠军!北邮学子勇夺昇腾AI原生创新算子挑战赛金奖

导读 如何从零开始学习算子开发&#xff1f;昇腾AI原生创新算子挑战赛冠军“法宝”大揭秘。 “0xCCCCCCCC团队夺冠&#xff01;” 2024年5月9日&#xff0c;在首届昇腾AI原生创新算子挑战赛S1赛季决赛现场&#xff0c;来自北京邮电大学0xCCCCCCCC团队的孙明志和梁昊骞以总分第…

基于IDEA的Maven(坐标信息介绍和编写)

这篇博客来学习和分析一下&#xff1a; " pom.xml " 所生成的最基本的信息。 之前的博客中讲到&#xff0c;学 Maven 就是学 " pom.xml " 的配置。后面也会围绕这个文件进行学习。 目录 一、分析 pom.xml 文件 &#xff08;1&#xff09;分析的 "p…

如何设置文件夹密码?文件夹加密如何操作!分享4款安全加密软件!

在数字化时代&#xff0c;数据安全显得尤为重要。设置文件夹密码和加密操作是保护个人或企业数据不被非法访问的有效手段。本文将为您详细介绍如何设置文件夹密码和加密操作&#xff0c;并分享四款安全加密软件&#xff0c;助您轻松提升数据安全防护能力。 一、如何设置文件夹/…

css布局之flex应用

/*父 100*/.parent-div {/* 这里添加你想要的属性 */display: flex;flex-direction: row; //行justify-content: space-between; //左右对齐align-items: center;flex-wrap: wrap; //换行}/*中 90 10 */.middle-div {/* 这里添加你想要的属性 */display: flex;flex-direction:…

揭开AI大模型的神秘面纱:一文看懂GPT-4的核心技术

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术迅猛发展&#xff0c;特别是AI大模型的崛起&#xff0c;给人们的生活和工作带来了深远的影响。作为其中的佼佼者&#xff0c;GPT-4备受瞩目。那么&#xff0c;GPT-4的核心技术究竟是什么&#xff1f;它是如何运作的&a…

YOLOv10改进 | 主干篇 | YOLOv10引入华为VanillaNet替换Backbone

1. VanillaNet介绍 1.1 摘要: 基础模型的核心是“越多越好”的理念,计算机视觉和自然语言处理领域取得的惊人成功就是例证。 然而,优化的挑战和变压器模型固有的复杂性要求范式向简单性转变。 在这项研究中,我们介绍了 VanillaNet,一种设计优雅的神经网络架构。 通过避免…

ChatGPT 提示词技巧一本速通

目录 一、基本术语 二、提示词设计的基本原则 三、书写技巧 2.1 赋予角色 2.2 使用分隔符 2.2 结构化输出 2.3 指定步骤 2.4 提供示例 2.5 指定长度 2.6 使用或引用参考文本 2.7 提示模型进行自我判断 2.8 思考问题的解决过程 ​编辑 2.10 询问是否有遗漏 2.11 …

快速使用OpenVINO的 Anomalib实现训练和推理

快速使用OpenVINO的 Anomalib实现训练和推理 代码运行的结果截图 代码 import os from pathlib import Path from anomalib.data import MVTec from anomalib import TaskType from anomalib.deploy import ExportType, OpenVINOInferencer from anomalib.engine import Engine…

【第19章】Vue实战篇之主页面

文章目录 前言一、代码1. 主界面代码2. App.vue 二、展示总结 前言 登录完成之后&#xff0c;应该自动跳转到主页面&#xff0c;接下来我们搭建主界面。 一、代码 1. 主界面代码 <script setup> import {Management,Promotion,UserFilled,User,Crop,EditPen,SwitchBut…

IPV6配置一

1、接口配置 IPV6 的单播地址&#xff1b; 1)link-local (1)rl(config)#interface fastEthernet 0/0 rl(config-if)#ipv6 enable (2)手工或自动配置一个IPV6的AGUA&#xff0c;均会生成一个 link-local地址&#xff1b;但无论配置多少个AGUA地址&#xff0c;也只能生产一个link…

AIDL入门学习一

2.1.1、创建 .aidl 文件 // IImoocAidl.aidl package com.test.server; // Declare any non-default types here with import statements interface IImoocAidl { // 计算两个数的和 int add(int num1,int num2); } 然后make project&#xff0c;会生成IImoocAidl.java…

机器学习_SVM支持向量机

引入&#xff1a;在面对线性可分时&#xff0c;即用一条直线就可以区分数据的时候&#xff0c;需要将直线放在距离数据点距离最大化的位置&#xff0c;这个过程需要寻找最大间隔&#xff0c;即为最优化问题。当数据点不能用一根直线区分——线性不可分&#xff0c;就需要用核函…

网页发起 http 请求的全过程详解图

原文地址&#xff1a;https://dev.to/gallau/lifecycle-of-a-url-request-2gan

JDK中线程池(juc编程)

2.3 JDK中线程池 2.3.1 Executors JDK对线程池也进行了相关的实现&#xff0c;在真实企业开发中我们也很少去自定义线程池&#xff0c;而是使用JDK中自带的线程池。 我们可以使用Executors中所提供的静态方法来创建线程池。 获取线程池的方法&#xff1a; //通过不同的方法…

进阶必看,3种灵活操作PyTorch张量的高级方法

大家好&#xff0c;在PyTorch中进行高级张量操作时&#xff0c;开发者经常面临这样的问题&#xff0c;如何根据一个索引张量从另一个张量中选取元素。 例如有一个包含数千个特征的大规模数据集&#xff0c;需要根据特定的索引模式快速提取信息。本文将介绍三种索引选择方法来解…