【力扣】20. 有效的括号

news2024/11/25 13:18:43

有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

示例 1:
输入:s = “()
输出:true
示例 2:
输入:s = “()[]{}
输出:true
示例 3:
输入:s = “(]
输出:false

提示:
1 < = <= <= s.length < = <= <= 1 0 4 10^4 104
s 仅由括号 ‘()[]{}’ 组成

import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Stack;

class Solution {
    public boolean isValid(String s) {
        //用于匹配的map,键为左括号,值是右括号
        HashMap<Character, Character> hashMap = new HashMap<Character, Character>();
        hashMap.put(')', '(');
        hashMap.put(']', '[');
        hashMap.put('}', '{');

        //建栈
        Stack<Character> stack = new Stack<>();

        for (char c : s.toCharArray()) {

            if (stack.isEmpty()) {
                stack.add(c);
            }
            else if (c == '(' || c == '[' || c == '{') {
                stack.add(c);
            }
            else if( !stack.pop().equals(hashMap.get(c))) {
                return false;
            }
        }
        if (stack.isEmpty()) {
            return true;
        }
        else {
            return false;
        }
    }


    public boolean isValid2(String s) {
        while (true) {
            //长度
            int l = s.length();
            s = s.replace("()", "");
            s = s.replace("{}", "");
            s = s.replace("[]", "");
            if (s.length() == l) {
                return l == 0;
            }
        }
    }


    public boolean isValid3(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();
    }
}

public class Main {
    public static void main(String[] args) {
        Solution solution = new Solution();
        Boolean result = solution.isValid("()");

        System.out.println(result);
    }
}

下面是第三种方法:代码随想录提供的解法
在这里插入图片描述

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

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

相关文章

uniapp H5预览PDF文件

1&#xff0c;下载资源后hybrid文件存放在static静态文件里 (点击这里去下载文件) 2&#xff0c;pdf预览页面配置 <template><view style"width: 100vh;"><web-view :src"pdfUrl"></web-view></view> </template><…

【每日一题】1289. 下降路径最小和 II

【每日一题】1289. 下降路径最小和 II 1289. 下降路径最小和 II题目描述解题思路 1289. 下降路径最小和 II 题目描述 给你一个 n x n 整数矩阵 grid &#xff0c;请你返回 非零偏移下降路径 数字和的最小值。 非零偏移下降路径 定义为&#xff1a;从 grid 数组中的每一行选择…

【计算机视觉】简述对EQ-Net的理解

最近又看了一些点云分割的文章&#xff0c;近两年点云分割的文章是真的少&#xff0c;不知道是不是点云分割算法接近了末端。这篇文章主要提出了一个基于查询方法的统一范式&#xff0c;它解决了一些不仅仅是点云分割的问题&#xff0c;还解决了三维点云分类和三维目标检测的问…

解密AI图像安全技术:智能守护数智时代,低代码平台助力圈复杂操作!

前言 随着数智时代的来临&#xff0c;人们进入了一个全新的智能化世界。在这个时代中&#xff0c;人工智能&#xff08;AI&#xff09;成为了一项重要的技术突破&#xff0c;其应用也无处不在。其中&#xff0c;AI图像安全技术作为保障个人和企业数据安全的重要环节&#xff0c…

Linux——认识Linux的目录结构 常用命令 vim命令 权限及其控制

目录 linux的目录结构常用linux的命令ls(list)和llcd 切换目录mkdir 创建文件夹touch命令&#xff1a;创建普通文本文件pwd 显示路径whoamisu&#xff1a;普通--超级账号man&#xff1a;查看手册rm&#xff1a;删除网络命令ifconfig重定向 >>cat 查看文本文件clear清屏hi…

3.2 Bootstrap 下拉菜单(Dropdowns)

文章目录 Bootstrap 下拉菜单&#xff08;Dropdowns&#xff09;选项对齐标题 更多实例 Bootstrap 下拉菜单&#xff08;Dropdowns&#xff09; 本章将重点介绍 Bootstrap 下拉菜单。下拉菜单是可切换的&#xff0c;是以列表格式显示链接的上下文菜单。这可以通过与 下拉菜单&a…

NZ12:VBA给批量文件重命名

【分享成果&#xff0c;随喜正能量】沉默&#xff0c;可以让混乱的心&#xff0c;变得清澈。沉默&#xff0c;是城府&#xff0c;是睿智&#xff0c;是内涵&#xff1b;沉默&#xff0c;是最后的清高&#xff0c;也是最后的自由。。 我的教程一共九套及VBA汉英手册一部&#x…

nginx添加模块fastdfs-nginx-module(docker版,不需要重写dockerfile)

nginx添加模块fastdfs-nginx-module&#xff08;docker版&#xff0c;不需要重写dockerfile&#xff09; 一、fastdfs-nginx-module模块准备1.1、下载模块1.2、配置模块参数 二、重新制作nginx的二进制执行文件2.1、查看nginx版本2.2、下载nginx配套版本的源码文件2.3、制作ngi…

线性表综合应用题2

设计一个高效算法&#xff0c;将顺序表L的所有元素逆置&#xff0c;要求算法的空间复杂度为O(1)。 算法思想&#xff1a;扫描顺序表L的前半部分元素&#xff0c;对于元素L.data[i] (0<i<L.length/2),将其与后半部分的对应元素L.data[L.length - i - 1]进行交换。 #defi…

GC overhead limit exceeded问题

GC overhead limit exceeded问题 一、为什么会产生GC overhead limit exceeded问题 OutOfMemoryError是java.lang.VirtualMachineError的子类&#xff1b;JVM遇到与资源利用有关的问题时&#xff0c;会抛出该错误。更具体地说&#xff0c;当JVM花太多时间执行垃圾回收并且只能…

807. 区间求和

链接&#xff1a; 链接 题目&#xff1a; 输入两个整数 ll 和 rr&#xff0c;请你编写一个函数&#xff0c;int sum(int l, int r)&#xff0c;计算并输出区间 [l,r][l,r] 内所有整数的和。 输入格式 共一行&#xff0c;包含两个整数 ll 和 rr。 输出格式 共一行&#xff0c;包…

分支IPSECV批恩连接总部突然上线不了,连接其他总部正常

环境: 分支: AF8.0.17 总部设备: SSL V批恩 V7.0 AF8.0.75 问题描述: 分支IPSECV批恩连接总部突然上线不了,之前正常,连接其他总部正常 解决方案: 排查&解决 1.先在分支和总部设备各查询故障日志 分支 总部 然后在分支AF上进入系统排障页面,测试ping总…

14、Horizontal Pod Autoscale

一、为何进行缩扩容&#xff1f; 在实际生产中&#xff0c;经常会遇到某个服务需要扩容的场景&#xff0c;可能会遇到由于资源紧张或者工作负载降低而需要减少服务实例数量的场景。可以利用Deployment/RC的Scale机制来完成这些工作。 二、缩扩容模式 Kubernetes 对 Pod 扩容与缩…

【Android Framework系列】第6章 AMS原理之Launcer启动流程

1 前言 我们在上一章节【Android Framework系列】第5章 AMS启动流程中简单的分析了AMS的启动流程&#xff0c;这一章节我们来了解一下&#xff0c;通过AMS是怎么完成Activity的启动 下面我们通过Launcher启动一起来看看Activity的启动流程 本文基于Android10&#xff08;Q&a…

不同语言采集【淘宝1688拼多多API】平台数据的方式

首先我们以taobao商品页面采集商品详情数据为例&#xff1a; 请求方式&#xff1a;HTTPS POST GET 请求地址&#xff1a;API接口 请求参数 请求参数&#xff1a;num_iid669646899650&is_promotion1参数说明&#xff1a;num_iid:淘宝商品ID is_promotion:是否获取取促销…

Space Saving算法

用于大数据中统计元素数量最多的元素的算法。 SpaceSaving算法是一种近似计数算法&#xff0c;它在大多数情况下能够提供准确的结果。然而&#xff0c;它并不是完全准确的&#xff0c;因为它使用了一些近似技巧来降低内存使用。具体来说&#xff0c;SpaceSaving算法通过牺牲一定…

基于STM32CUBEMX驱动TOF模块VL6180与VL6180X(4)----测量环境光

基于STM32CUBEMX驱动TOF模块VL6180与VL6180X----4.测量环境光 概述样品申请VL6180X传感器的测量流程ALS动态范围ALS动态范围测量流程光强计算公式配置vl6180x测试结果 概述 在本章中&#xff0c;我们将介绍如何配置VL6180X传感器以测量环境光&#xff0c;并获取环境光的强度值…

I.MX8MM系统构建 -- 2.linux内核编译烧录

准备源码 源码位置&#xff1a;/source/myir-imx-linux.tar.gz解压源码 tar zxf myir-imx-linux.tar.gz 编译 进入源码目录后&#xff0c;依次执行下列指令 myirmyir-server1:$ make distclean myirmyir-server1:$ make myd_imx8mm_defconfig myirmyir-server1:$ LDFLAG…

代码随想录刷题第53天|Leetcode1143最长公共子序列

1、Leetcode1143最长公共子序列 题目链接&#xff1a;1143最长公共子序列 本题不要求连续&#xff0c;求最长公共子序列。 1、确定dp数组及下标的含义 dp[i][j]&#xff1a;长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]。 2、…

volatile原理剖析和实例讲解

一、是什么 volatile是Java的一个关键字&#xff0c;是Java提供的一种轻量级的同步机制&#xff0c; 二、能做什么 保证了不同线程对这个变量进行操作时的可见性&#xff0c;有序性。 三、可见性 可见性主要是指一个线程修改了共享变量的值&#xff0c;另一个线程可以看见…