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 {// 如果是右括号// 检查栈是否为空,如果为空,则返回 falseif (stack.isEmpty()) {return false;}// 获取栈顶元素char top = stack.pop();// 检查当前右括号与栈顶元素是否匹配// 如果不匹配,则返回 falseif ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) {return false;}}}// 最后,如果栈为空,则返回 true,否则返回 falsereturn stack.isEmpty();}
}

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

  欢迎大家评论区讨论。

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

图片

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

USART发送单字节数据原理及程序实现

硬件接线&#xff1a; 显示屏的SCA接在B11&#xff0c;SCL接在B10&#xff0c;串口的RX连接A9&#xff0c;TX连接A10。 新建Serial.c和Serial.h文件 在Serial.c文件中&#xff0c;实现初始化函数&#xff0c;等需要的函数&#xff0c;首先对串口进行初始化&#xff0c;只需要…

Teamcenter 快速获取所有激活状态用户的方法

问题描述&#xff1a; License数量有限&#xff0c;需要分析Teamcenter 中所有激活状态下的用户&#xff0c;对其进行删减。如何快速获取Teamcenter 中所有激活状态用户呢&#xff1f; 解决方法&#xff1a; Teamcenter Query Builder提供了强大的自定义搜索功能。 新建查询…

Jenkins--在Linux上使用Docker安装

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

TCP重传机制详解——02SACK

文章目录 TCP重传机制详解——02 SACKSACK是什么&#xff1f;为什么要有SACK&#xff1f;实际场景抓包具体显示信息流程 实战抓包讲解SACK关闭场景下&#xff0c;三次重复ACK后会快速重传SACK打开但是不携带SACK块信息场景下&#xff0c;三次重复ACK也不会快速重传SACK打开并且…

Docker搭建LNMP环境实战(04):安装VMwareTools共享文件夹

1、加载VMware Tools安装盘 在VMware客户端&#xff0c;点击主菜单&#xff1a; 图1 启动VMware Tools安装 再点击下面的菜单&#xff1a; 图2 打开设置界面 出现下面的界面&#xff0c;虚拟DVD加载的是linux.iso 图3 查看VMware Tools的DVD虚拟安装映像文件 将DVD加载到CentO…

C++ 控制语句(一)

一 顺序结构 程序的基本结构有三种&#xff1a; 顺序结构、分支结构、循环结构 大量的实际问题需要通过各种控制流程来解决。 1.1 顺序结构 1.2 简单语句和复合语句 二 循环 2.1 for循环 语句流程图 注意&#xff1a;使用for语句的灵活性 三 while语句 四 do while语句

SpringCloud详解(持续更新)

springcloud定义 springcloud搭建 Eureka&#xff08;注册发现&#xff09; Eureka主页信息 Eureka服务注册中心&#xff08;Eureka Server&#xff09; 搭建 失效剔除&#xff08;配置&#xff09; Eureka服务提供方&#xff08;Eureka Client&#xff09; 搭建 Eureka服务消…

基于DWT(离散小波变换)的图像水印算法,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

Avalonia笔记2 -数据集合类控件

学习笔记&#xff1a; 1. DataGrid 笔记1中已经记录&#xff1b; 2. ItemsControl 属性&#xff1a; ItemsSource&#xff1a;数据源 ItemsControl.ItemTemplate&#xff1a;单项数据模板&#xff0c;内部使用<DataTemplate> 示例&#xff1a; <ItemsContr…

Linux相关命令(1)

1、找出文件夹下包含 “aaa” 同时不包含 “bbb”的文件&#xff0c;然后把他们重新生成一下。要求只能用一行命令。 find ./ -type f -name "*aaa*" ! -name "*bbb*" -exec touch {} \;文件系统操作命令 df&#xff1a;列出文件系统的整体磁盘使用情况 …

(一)Spring Cloud 的认识

1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。 1.1.单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打成一个包部署。 单体架构的优缺点如下&am…

C语言例4-15:从键盘输入一个整数,求其绝对值并输出。

代码如下&#xff1a; //从键盘输入一个整数&#xff0c;求其绝对值并输出。 #include<stdio.h> int main(void) {int n;printf("输出一个整数&#xff1a; \n");scanf("%d",&n); //从键盘输入一个整数保存至变量nif(n<0) //…