leetCode刷题 20. 有效的括号

目录

题目:

1. 思路

2. 解题方法

3. 复杂度

4. Code


题目:

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

有效字符串需满足:

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

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "()[]{}"
输出:true

示例 3:

输入:s = "(]"
输出:false

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

1. 思路

我们可以使用栈来解决这个问题。遍历字符串,当遇到左括号时,将其压入栈中;当遇到右括号时,检查栈顶元素是否与其匹配的左括号,如果匹配则将栈顶元素出栈,继续遍历;如果不匹配,则返回 false。最后,如果栈为空,则说明字符串有效,否则返回 false。

2. 解题方法

  1. 创建一个栈用于存放左括号。
  2. 遍历字符串 s 中的每个字符:
    • 如果是左括号,则将其压入栈中。
    • 如果是右括号,则检查栈顶元素是否与其匹配的左括号,如果匹配则将栈顶元素出栈,继续遍历;如果不匹配,则返回 false。
  3. 最后,如果栈为空,则返回 true,否则返回 false。

3. 复杂度

  • 时间复杂度:O(N),其中 N 是字符串 s 的长度。
  • 空间复杂度:O(N),最坏情况下,栈中会存放所有的左括号。

4. Code

import java.util.Stack;

class Solution {
    public boolean isValid(String s) {
        // 创建一个栈用于存放左括号
        Stack<Character> stack = new Stack<>();
        
        // 遍历字符串 s 中的每个字符
        for (char c : s.toCharArray()) {
            // 如果是左括号,则将其压入栈中
            if (c == '(' || c == '[' || c == '{') {
                stack.push(c);
            } else {
                // 如果是右括号
                // 检查栈是否为空,如果为空,则返回 false
                if (stack.isEmpty()) {
                    return false;
                }
                
                // 获取栈顶元素
                char top = stack.pop();
                
                // 检查当前右括号与栈顶元素是否匹配
                // 如果不匹配,则返回 false
                if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) {
                    return false;
                }
            }
        }
        
        // 最后,如果栈为空,则返回 true,否则返回 false
        return stack.isEmpty();
    }
}

        这段代码使用了栈来检查字符串中的括号匹配情况,如果匹配则返回 true,否则返回 false。

  欢迎大家评论区讨论。

(一份比较早的面试宝典,有兴趣的可以私信我领取!!!免费滴)

图片

 

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

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

相关文章

docker部署音乐播放下载器

可播放及下载音乐的工具 musicn 下载镜像 docker pull ghcr.m.daocloud.io/wy580477/musicn-container:latest创建数据目录 mkdir -p /data/musicdocker-compose部署 vim docker-compose.yml version: 3 services:musicn:container_name: musicnimage: ghcr.io/wy580477/m…

短信系统后台搭建要注意什么|网页版短信平台开发

在搭建短信系统后台时&#xff0c;需要注意以下几个关键方面&#xff0c;以确保系统的稳定性、安全性和高效性&#xff1a; 选择合适的技术栈&#xff1a;根据项目需求和团队实际情况选择合适的后端开发语言和框架&#xff0c;如Java Spring、Node.js、Python Django等。 系统…

深入理解React的setState机制

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

耳目一新的滑块版登录注册界面~

又到了毕业季&#xff0c;大家做毕设的时候总会参考已有的案例&#xff0c;不过大多产品的样式非常单一雷同。本帖博主给大家分享一个比较别树一帜的登录界面&#xff0c;如下&#xff1a; 如果没有账号&#xff0c;点击“去注册”&#xff0c;则会产生如下的效果&#xff1a; …

【Linux 08】进程概念

文章目录 &#x1f308; 01. 基本概念&#x1f308; 02. 描述进程 PCB&#x1f308; 03. 使用 ./ 的方式创建进程&#x1f308; 04. ps 查看进程&#x1f308; 05. getpid / getppid 获取进程标识符&#x1f308; 06. kill 终止指定进程&#x1f308; 07. fork 创建子进程&…

设置asp.net core WebApi函数输入和返回类型中的属性名称开头大小写格式

以下列类型定义为例创建简单的ASP.NET Core的WebApi函数&#xff0c;此时输入参数和返回结果的属性名称开头默认为小写&#xff0c;如下图所示。 public class UserInfo { public string UserName { get; set; }public string UserSex { get; set; }public string UserP…

利用瑞士军刀netcat建立连接并实现文件上传

实验环境&#xff1a; Kali:192.168.117.129 Windows10:192.168.135.142 第一步&#xff1a;建立连接 在Windows上下载netcat(官网搜索) 下载好之后在netcat目录打开cmd进入小黑屏 实验一&#xff1a;建立虚拟机与主机的连接 命令&#xff1a; Kali:nc 192.168.135.144…

观成科技:白象组织BADNEWS木马加密通信分析总结报告

概述 白象&#xff0c;又名Hangover、Patchwork、摩诃草等&#xff0c;该组织主要针对中国、巴基斯坦等亚洲地区国家进行网络间谍活动&#xff0c;攻击目标以政府机构、科研教育领域为主。 自16年起&#xff0c;该APT组织一直持续使用攻击武器BADNEWS开展攻击活动&#xff0c…

C++:变量和常量(3)

变量 什么是变量&#xff1a;变量就是一个装东西的盒子 通俗&#xff1a;变量是用于存放数据的容器。我们通过变量名获取数据&#xff0c;甚至数据可以修改 变量的作用&#xff1a;给指定的内存空间起名&#xff0c;后期通过起的名字就可以调用整个内存空间 定义变量的格式 &a…

Jenkins--在Linux上使用Docker安装

一、Jenkins 简介 Jenkins是一个流行的开源自动化服务器&#xff0c;用于持续集成和持续交付&#xff08;CI/CD&#xff09;。Jenkins的核心功能主要包括以下几点&#xff1a; 持续集成&#xff1a;Jenkins可以监控版本控制系统&#xff08;如Git、SVN&#xff09;中的代码变…

pytorch+tensorboard

安装依赖 pip install teorboard pip install torch_tb_profiler了解teorboard 记录并可视化标量[组]、图片[组]。 如何使用 第一步:构建模型,记录中间值,写入summarywriter 每次写入一个标量add_scalar 比如: from torch.utils.tensorboard import SummaryWriter wr…

三、阅读器开发--4、阅读器目录、全文搜索功能开发

1、阅读器目录 1.1、实现目录 先实现目录的布局 定义一个蒙版&#xff0c;充满整个屏幕浮在阅读器上方&#xff0c;左侧为目录右侧为背景&#xff0c;目录下方包含一个tab&#xff0c;点击后会切换不同的内容&#xff0c;这里tab是目录、书签&#xff0c;这里可以通过如下的…

华为设备配置攻击防范

组网需求 如图1所示&#xff0c;如果局域网内存在Hacker向RouterA发起畸形报文攻击、分片报文攻击和泛洪攻击&#xff0c;将会造成RouterA瘫痪。为了预防这种情况&#xff0c;管理员希望通过在RouterA上部署各种攻击防范措施来为用户提供安全的网络环境&#xff0c;保障正常的…

【Canvas与艺术】模拟八一电影制片厂电影片头效果

【缘起】 八一厂每部电影前都有其专有开头&#xff0c;如&#xff1a;https://www.ixigua.com/6799821997258834440?logTag2eacce76401e13f9efe7 这个片头可以用canvas模拟下来。 【关键点】 线型放射状粒子系统的运作。 立体感五角星的绘制。 【图例】 【代码】 <!D…

springBoot+ureport报表引擎

UReport是一款基于单元格迭代模型的纯Java中式报表引擎。它架构于Spring之上&#xff0c;因此与企业应用具有良好的集成能力。UReport提供了基于Eclipse插件与基于网页的两种报表模版设计方式&#xff0c;采用类Excel报表模版设计风格&#xff0c;简单、易上手&#xff0c;可在…

Nginx配置静态代理/静态资源映射时root与alias的区别,带前缀映射用alias

场景 Nginx搭建静态资源映射实现远程访问服务器上的图片资源&#xff1a; Nginx搭建静态资源映射实现远程访问服务器上的图片资源_nginx 当作图片资源访问 博客-CSDN博客 以上在配置静态资源映射时使用的如下配置 location / {root D:/pic_old/;try_files $uri $uri/ /ind…

游戏开发笔记:游戏海外版本时区问题(解释时区问题,分解为js写法和lua写法来分析记录,整理出对应语言的相关函数方法。)

对于海外游戏而言,与时间相关的功能,都不能忽略时区的计算。根据 ‘ 服务端资源是有限的,客户端资源是无穷无尽的 ’的定义来说,基本上时区包括时间的计算都是由客户端来进行计算,今天内容也是围绕客户端来展开。 时区算法常见的时间描述时区需要计算的点在lua语言中的写…

//简单函数_素数距离问题

任务描述 现在给出你一些数&#xff0c;要求你写出一个程序&#xff0c;输出这些整数相邻最近的素数&#xff0c;并输出其相距长度。如果左右有等距离长度素数&#xff0c;则输出左侧的值及相应距离。 如果输入的整数本身就是素数&#xff0c;则输出该素数本身&#xff0c;距离…

谷歌Google广告推广开户和投放攻略?

随着出海市场增加&#xff0c;越来越多的中国企业选择借助谷歌Google广告这一全球最大的在线广告平台&#xff0c;拓展海外市场&#xff0c;提升品牌知名度和产品销量。在这个过程中&#xff0c;选择一家专业且富有实战经验的服务商至关重要&#xff0c;而云衔科技正是这样一位…

看奈飞三体魔改 赏国产《三体》预告片AI重制版

看奈飞三体魔改 赏国产《三体》预告片AI重制版 In the vast expanse of the universe, secrets await to be uncovered. 宇宙无垠&#xff0c;秘密待揭。 A signal from the depths of space leads to an encounter with an alien civilization - the Trisolarans. 深空信号引…