力扣(LeetCode)20. 有效的括号(C++)

news2025/1/11 21:49:18

栈模拟

一次遍历字符串 s s s , 遇到左括号则入栈,遇到右括号则匹配栈顶。如果右括号匹配成功 , 栈顶元素弹栈 , 匹配不成功 , 则 r e t u r n    f a l s e return\ \ false return  false

提示 : 当遍历完所有字符,记得判断栈内是否为空, 如果空,则有左括号没匹配, r e t u r n    f a l s e return\ \ false return  false。栈空 r e t u r n    t r u e return\ \ true return  true

观察 A S C I I ASCII ASCII 码值 , 匹配的左右括号最大相差 2 2 2 。 所以用绝对值之差 ≤ 2 \leq 2 2 判断匹配。

class Solution {
public:
    bool isValid(string s) {
        stack<char> stk;
        for(auto &x:s){
            if('('==x||'{'==x||'['==x) stk.push(x);
            else{
                if(stk.size()&&abs(x-stk.top())<=2) stk.pop();
                else return false;
            }
        }
        return stk.size()==0;
    }
};

栈+哈希表

也可以用哈希表,将左括号映射到右括号,判断匹配。

class Solution {
public:
    bool isValid(string s) {
        stack<char> stk;
        unordered_map<char,char> mp{
            {'[',']'},
            {'{','}'},
            {'(',')'},
        };
        for(auto &x:s){
            if('('==x||'{'==x||'['==x) stk.push(x);
            else{
                if(stk.size()&& mp[stk.top()] == x) stk.pop();
                else return false;
            }
        }
        return stk.empty();
    }
};

时间复杂度 O ( n ) O(n) O(n) n n n 是字符串 s s s 的长度 , 括号匹配的时间复杂度 O ( n ) O(n) O(n)

空间复杂度 O ( n ) O(n) O(n) , 栈的最坏空间复杂度 O ( n ) O(n) O(n)

博主致语

理解思路很重要!
欢迎读者在评论区留言,作为日更博主,看到就会回复的。

AC

AC

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

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

相关文章

【计算机网络】扩展以太网方法总结

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录物理层扩展以太网链路层扩展以太网网桥网桥分类透明网桥源路由网桥多接口网桥----以太网交换机直通式交换机存储转发式交换机冲突域与广播域&#x1f343;博主昵称&#xff1a;一拳必胜客 &#x1f338;博主…

LinkedList详解

介绍 众所周知ArrayList底层数据结构是数组&#xff0c;但是数组有个缺点&#xff0c;虽然查询快&#xff0c;但是增删改会慢因为数组是在连续的位置上面储存对象的应用。当我们删除某一个元素的时候在他后面的元素的索引都会左移&#xff0c;导致开销会很大。所以LinkedList应…

Linux系统下交叉编译工具的安装实现

大家好&#xff0c;今天主要和大家聊一聊&#xff0c;如何使用Linux系统下的交叉编译工具链的方法。 目录 第一:交叉编译工具链基本简介 ​第二&#xff1a;交叉编译工具安装方法 ​第三&#xff1a;安装相关库 ​第四&#xff1a;交叉编译工具验证 第一:交叉编译工具链基…

0100 蓝桥杯真题03

import java.util.Scanner; /* * 题目描述 * 如下图所示&#xff0c;3 x 3 的格子中填写了一些整数。 --*---- |10* 1|52| --****-- |20|30* 1| *******-- | 1| 2| 3| ------ *我们沿着图中的星号线剪开&#xf…

【Redis-04】Redis两种持久化方式(RDB和AOF)

Redis是基于内存的数据结构服务器&#xff0c;保存了大量的键值对数据&#xff0c;所以持久化到磁盘是非常必要的&#xff0c;Redis提供了两种持久化的方式&#xff0c;分别是RDB和AOF。下面我们看下这两种持久化方式的具体实现原理。 1.RDB持久化 首先&#xff0c;RDB持久化方…

Mysql基础

Mysql基础1. 数据库相关概念1.1 数据库1.2 数据库管理系统1.3 常见的数据库管理系统1.4 SQL2. Mysql的安装2.1 MySQL数据模型3. SQL概述3.1 SQL简介3.2 通用语法3.3 SQL分类4. DDL:操作数据库4.1 数据库的显示讲解4.2 查询4.3 创建数据库4.4 删除数据库4.5 使用数据库4.6 小结5…

linux Qt编译自己的动态库(.so),详细全流程

本篇记录Qt编译动态库全流程 1. 建立工程 首先&#xff0c;打开Qt&#xff0c;新建C Library 工程 点击choose之后&#xff0c;输入项目名称为Example&#xff0c;一直下一步即可 生成的项目里边有三个文件&#xff0c;分别是example.h, Example_global.h, example.cpp exam…

数据结构之:递归思想

&#xff08;一&#xff09;递归概念 将复杂问题 递推分解为最简问题 然后将结果回归的过程 Windows - Linux Linux Linux is not Unix 使用方法&#xff1a; 自己调用自己&#xff08;二&#xff09;斐波那契数列 兔子问题 有一对大兔子 每个月繁衍 一对小兔子&#xff08;一…

【Java 设计模式】UML 之类图

UML 之类图前言&#xff1a;什么是 UML &#xff1f;1 类图概念2 类的表示方式3 类与类之间关系的表示方式3.1 关联关系3.1.1 单向关联3.1.2 双向关联3.1.3 自关联3.2 聚合关系3.3 组合关系3.4 依赖关系3.5 继承关系3.6 实现关系前言&#xff1a;什么是 UML &#xff1f; 定义…

Linux 软件包下载加速工具:APT Proxy

本篇文章将继续介绍这个仅有 2MB 身材大小的 Linux 软件包缓存和加速工具&#xff1a;APT Proxy。 相比老牌的 apt cacher ng 而言&#xff0c;除了尺寸更小、内存占用更低&#xff08;10M以内&#xff09;、它还拥有无需配置&#xff0c;开箱即用等特点。 写在前面 年中的时…

!与~有什么区别

目录 将整型数据转换为二进制的函数 利用函数查看&#xff01;与~之后的数据有何不同 以一个非0数据作为例子 以0作为例子 我们都知道&#xff01;与~都是用于取反的。那么这两个有什么区别呢&#xff1f; 我们百度结果如下&#xff0c;很明显&#xff0c;八股文。我接下…

element-ui时间选择器(DatePicker )数据回显

系列文章目录 第一篇【element-ui】table表格底部合计自定义配置 目录 前言 一、element-ui时间选择器&#xff08;DatePicker &#xff09;是什么&#xff1f; DatePicker 日期选择器 二、返回数据格式 1.引入 总结 前言 需求&#xff1a;element-ui时间选择器&#…

【报错】QT Release NO CMAKE_CXX_COMPILER could be found

NO CMAKE_CXX_COMPILER could be found 错误&#xff1a; Tell CMake where to find the compiler by setting either the environmentvariable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path tothe compiler, or to the compiler name if it …

PostgreSQL数据库动态共享内存管理器——dynamic shared memory segment

首先看dynamic_shared_memory_type GUC参数&#xff0c;该参数用于指定dynamic shared memory implementation类型&#xff08;DSM_IMPL_POSIX、DSM_IMPL_SYSV、DSM_IMPL_WINDOWS、DSM_IMPL_MMAP&#xff0c;定义在src/include/storage/dsm_impl.h文件中&#xff09;。了解一下…

前段入门-CSS

目录1 CSS 快速入门1.1 CSS 的介绍1.2 CSS 的组成2 基本语法2.1 CSS 的引入方式2.1.1 内联样式2.1.2 内部样式2.1.3 外部样式2.2 注释2.3 选择器2.3.1 基本选择器2.3.2 属性选择器2.3.3 伪类选择器2.3.4 组合选择器2.4 总结3 CSS 案例-头条页面3.1 案例效果3.2 案例分析3.2.1 边…

【第三部分 | 移动端开发】4:Rem布局

目录 | Rem布局简介 | 单位 rem | 媒体查询 | 根据不同的媒体引入不同的CSS | less基础 概述与安装 基础使用&#xff1a;创建less文件 基础使用&#xff1a;变量 基础使用&#xff1a;用Esay LESS插件把less文件编译为css 基础使用&#xff1a;嵌套 基础使用&#x…

cuda在windows10安装教程

CUDA安装教程&#xff0c;以Windows10系统为例&#xff1a; CUDA.exe安装 查看电脑的支持的CUDA版本&#xff0c;按照如下教程&#xff1a; 首先找到这个图标&#xff0c;也就是nvidia控制面板&#xff0c;然后打开&#xff1a; 然后点击左下角系统信息 再点击“组件”&…

LabVIEW性能和内存管理 8

LabVIEW性能和内存管理 8 本文介绍LabVIEW性能和内存管理的几个建议8。 MemoryFragmentation内存碎片 内存管理器分配和释放内存需要时间&#xff0c;这会降低执行速度。在某些情况下&#xff0c;即使假设有足够的可用内存&#xff0c;也会发生内存不足错误。 上图显示了实际…

【练拳不练功,到老一场空】深入浅出计算机组成原理

深入浅出计算机组成原理 文章目录深入浅出计算机组成原理计算机的基本组成硬件设备组成CPU内存主板I/O 设备硬盘显卡冯.诺依曼体系结构运算器/处理器单元控制器存储器输入设备输出设备举个栗子&#xff1a;计算机的性能与功耗响应时间吞吐率CPU时钟/主频计算机的功耗计算机的指…

jdk8新特性(Lambda、Steam、函数式接口)

JDK8新特性 JDK8新特性Lambda表达式函数式&#xff08;Functional&#xff09;接口方法引用与构造器引用方法引用构造器引用强大的 StreamAPI创建Stream方式Stream 的中间操作Stream 的终止操作Optional 类Java 8 (又称为jdk 1.8)是Java语言开发的一一个主要版本。 Java 8是ora…