【LeetCode】数据结构题解(10)[有效的括号]
有效的括号
- 😉 1.题目来源
- 👀2.题目描述
- 🤔3.解题思路
- 🥳4.代码展示

😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘
所属专栏:玩转数据结构题型❤️
🚀 >博主首页:初阳785❤️
🚀 >代码托管:chuyang785❤️
🚀 >感谢大家的支持,您的点赞和关注是对我最大的支持!!!❤️
🚀 >博主也会更加的努力,创作出更优质的博文!!❤️
🚀 >关注我,关注我,关注我,重要的事情说三遍!!!!!!!!❤️
😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘
😉 1.题目来源
LeetCode有效的括号
🚨注意:本题涉及到有关数据结构——栈,这一章节的知识点,如有小伙伴还不熟栈的,可以先复习复习一下有关栈的相关知识,复习的地方我也提供了哦🙂,所用到的知识点——栈
🚨注意:同样的本题是使用纯C语言实现的.
👀2.题目描述
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
3.每个右括号都有一个对应的相同类型的左括号。

🚨🚨🚨🚨🚨🚨🚨🚨🚨
-
🚨注意:像一下的测试用例也是
返回false的哦
💡: 输入: “( { ) }”;
💡: 输出:false
虽然这个有匹配的括号,但是这个是不行的,要满足,匹配一对括号后并拿掉这块括号后,后面的括号还能匹配才行. -
💡: 输入: “[ ( { } ) ]”
💡: 输出:true
这个便可以.
🤔3.解题思路
- 🤔当看到这个题目的时候,我们一开始的想法肯定是,通过一个数组把所有的括号存起来,在对数组遍历,通过判断是左括号来给其遍历找到右括号,直到所有括号都匹配完比,如果是这样的话,
空间复杂度是O(1),时间复杂度是O(n^2),这样看起来是可以的🤔实则是一个错误的思路,因为我们遍历的时候,虽然所有的括号都匹配成功了,但是😱可能括号的顺序是错误的,就比如:"( { ) }"或者再如"} { ] [ ) ("这些虽然遍历结束后,得到的都是所有括号都可以匹配成功,但是😮他们顺序是错误的,故返回false - 既然匹配成功的同时还要求要顺序不能乱我们就想到了,栈的特殊特点(先进的后出),于是我们就遍历数组,如果遇到的是左括号,我们就入栈,如果遇到的是右括号,我们就出栈匹配,这样根据栈的特性,就很好解决了括号的顺序问题.
💡例一:

💡例二:

🚨🚨🚨🚨🚨🚨🚨🚨🚨
🚨注意: 除了上面的情况之外,还可能遇到两种情况
-
💡1.右括号多了
如果是左括号多了的话,栈中有又没有括号了,直接返回false -
💡2.左括号多了
如果是右括号多了,就是栈中还有括号,二数组中没有与之匹配的括号了,同样返回false
🥳4.代码展示
//调用栈接口
typedef char STDataType;
typedef struct Stack
{STDataType* data;int capaciyt;int size;
}Stack;void StackInit(Stack* ps);void StackDestroy(Stack* ps);void StackPush(Stack* ps, STDataType x);void StackPop(Stack* ps);STDataType StackTop(Stack* ps);bool StackEmpt(Stack* ps);int StackSize(Stack* ps);void StackInit(Stack* ps)
{assert(ps);ps->data = NULL;ps->capaciyt = 0;ps->size = 0;
}void StackDestroy(Stack* ps)
{assert(ps);free(ps->data);ps->data = NULL;ps->capaciyt = ps->size = 0;
}void StackPush(Stack* ps, STDataType x)
{assert(ps);if (ps->size == ps->capaciyt){int newCapacity = ps->capaciyt == 0 ? 4 : ps->capaciyt * 2;STDataType* tmp = (STDataType*)realloc(ps->data, sizeof(STDataType) * newCapacity);if (tmp == NULL){perror("realloc");exit(-1);}ps->data = tmp;ps->capaciyt = newCapacity;}ps->data[ps->size] = x;ps->size++;
}void StackPop(Stack* ps)
{assert(ps);assert(!StackEmpt(ps));ps->size--;
}STDataType StackTop(Stack* ps)
{assert(ps);assert(!StackEmpt(ps));return ps->data[ps->size - 1];
}bool StackEmpt(Stack* ps)
{assert(ps);return ps->size == 0;
}int StackSize(Stack* ps)
{assert(ps);return ps->size;
}//函数实现
bool isValid(char * s)
{Stack st;//记得初始化StackInit(&st);while (*s){//如果是左括号就入栈if (*s == '[' || *s == '(' || *s == '{'){StackPush(&st,*s);}//如果是右括号,就出栈对比else{//如果是左括号更多,栈内数据为空,直接返回falseif (StackEmpt(&st)){StackDestroy(&st);return false;}char ch = StackTop(&st);StackPop(&st);if ((*s == ']' && ch != '[') || (*s == ')' && ch != '(') || (*s == '}' && ch != '{')){StackDestroy(&st);return false;}}s++;}//如果是右括号更多,栈中数据不为空,同样返回falsebool ret = StackEmpt(&st);StackDestroy(&st);return ret;
}
相关文章:
【LeetCode】数据结构题解(10)[有效的括号]
有效的括号 😉 1.题目来源👀2.题目描述🤔3.解题思路🥳4.代码展示 😘😘😘😘😘😘😘😘😘😘😘…...
5G用户逼近7亿,5G发展迈入下半场!
尽管普遍认为5G投资高峰期正在过去,但是从2023年上半年的情况来看,我国5G建设仍在衔枚疾走。 近日举行2023年上半年工业和信息化发展情况新闻发布会上,工信部人士透露,截至今年6月底,我国5G基站累计达到293.7万个&…...
分布式问题
1. 分布式系统CAP原理 CAP原理:指在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partitontolerance(分区容忍性),三者不可得兼。 一致性(C…...
教雅川学缠论06-中枢
本系列文章之前讲的内容都只有上升和下降两类趋势,并没有提及盘整,在缠论中,中枢这个新词汇用来定义盘整,中枢: 1.至少由5条线段(或笔)组成 2.中枢是有方向的,中枢左右两侧外面的线&…...
如何调教让chatgpt读取自己的数据文件(保姆级图文教程)
提示:如何调教让chatgpt读取自己的数据文件(保姆级图文教程) 文章目录 前言一、如何投喂自己的数据?二、调教步骤总结 前言 chatgpt提示不能读取我们提供的数据文件,我们应该对它进行调教。 一、如何投喂自己的数据? 让chatgpt读…...
React Native Camera的使用
介绍 React Native Camera是一个用于在React Native应用中实现相机功能的库。它允许你访问设备的摄像头,并捕获照片和视频。 使用 安装 npm install react-native-camera --save 安装完成后,你需要链接React Native Camera库到你的项目中。可以使用以…...
【Matlab】Elman神经网络遗传算法(Elman-GA)函数极值寻优——非线性函数求极值
往期博客👉 【Matlab】BP神经网络遗传算法(BP-GA)函数极值寻优——非线性函数求极值 【Matlab】GRNN神经网络遗传算法(GRNN-GA)函数极值寻优——非线性函数求极值 【Matlab】RBF神经网络遗传算法(RBF-GA)函数极值寻优——非线性函数求极值 本篇博客将主要介绍Elman神…...
@ControllerAdvice注解使用及原理探究 | 京东物流技术团队
最近在新项目的开发过程中,遇到了个问题,需要将一些异常的业务流程返回给前端,需要提供给前端不同的响应码,前端再在次基础上做提示语言的国际化适配。这些异常流程涉及业务层和控制层的各个地方,如果每个地方都写一些…...
Error: Design has unresolved cell reference
我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 所有的unresolved cell reference问题都是cell信息没读到引起的,在dc/pt里就是db没读到,在ICC2里就是ndm没读。 ICC2中午饭这个问题可以report_design_…...
uni-app 封装api请求
前端封装api请求 前端封装 API 请求可以提高代码的可维护性和重用性,同时使得 API 调用更加简洁和易用。 下面是一种常见的前端封装 API 请求的方式: 创建一个 API 封装模块或类:可以使用 JavaScript 或 TypeScript 创建一个独立的模块或类来…...
SpringCloud实用篇1——eureka注册中心 Ribbon负载均衡原理 nacos注册中心
目录 1 微服务1.1 微服务的演变1.2 微服务1.3 SpringCloud1.4 小结 2 服务拆分及远程调用2.1 服务拆分2.2 服务拆分案例2.3 实现远程调用2.4 提供者与消费者 3 Eureka注册中心3.1 Eureka的结构和作用3.2 搭建eureka-server3.3 服务注册3.4 服务发现 4 Ribbon负载均衡4.1 负载均…...
【MySQL】sql字段约束
在MySQL中,我们需要存储的数据在特定的场景中需要不同的约束。当新插入的数据违背了该字段的约束字段,MySQL会直接禁止插入。 数据类型也是一种约束,但数据类型这个约束太过单一;比如我需要存储的是一个序号,那就不可…...
森海塞尔为 CUPRA 首款纯电轿跑 SUV – CUPRA Tavascan 注入音频魅力
森海塞尔为 CUPRA 首款纯电轿跑 SUV – CUPRA Tavascan 注入音频魅力 音频专家森海塞尔携手富有挑战精神的 CUPRA,雕琢时代新贵车型,打造畅快尽兴的驾驶体验 全球知名音频专家森海塞尔与以颠覆传统、充满激情、不甘现状而闻名的汽车品牌 CUPRA 展开合作…...
Java、Android 加解密、编码、压缩、解压缩、Hash
对称加密: 算法:AES (128位)/ DES (56位)....等 加密原理: 原数据--->加密算法(密钥)------>密文 解密原理: 密文---->解密算法(密钥)------>原数据 非对称加密 算法&#…...
11_Pulsar Adaptors适配器、kafka适配器、Spark适配器
2.3. Pulsar Adaptors适配器 2.3.1.kafka适配器 2.3.2.Spark适配器 2.3. Pulsar Adaptors适配器 2.3.1.kafka适配器 Pulsar 为使用 Apache Kafka Java 客户端 API 编写的应用程序提供了一个简单的解决方案。 在生产者中, 如果想不改变原有kafka的代码架构, 就切换到Pulsar的…...
jupyter文档转换成markdown
背景 上一篇文章**《如何优雅地用python生成模拟数据》**我就使用jupyter写的,这个真的是万能的,可以插入markdown格式的内容,也可写代码,关键是像ipython一样,可以分步执行。 我可以这样自由的写我的博客内容&#x…...
日志框架及其使用方法
log4j和logBack,同一个人写的,logBack为log4j的升级版,SpringBoot中默认集成logBack 作用:记录软件发布后的一些bug,以及数据是怎样被操作的 传统开发弊端: 1.日志直接输出在控制台,关闭控制台后,日志消…...
ZIG:理解未来编程语言的视角
文章目录 摘要:引言:性能简洁性和模块化避免常见错误和陷阱总结:参考资料📑: 摘要: 本文介绍了新兴编程语言ZIG的目标和特点,包括高性能、简洁性和模块化,并分析了这些特点是如何通过语言设计来…...
让三驾马车奔腾:华为如何推动空间智能化发展?
上个月,国务院常务会议审议通过了《关于促进家居消费的若干措施》,其中明确提出了“推动单品智能向全屋智能发展创新培育智能消费”“开展数字家庭建设试点”等推动全屋智能拼配发展的建议与方案。 可以说,以整屋为单位的空间智能品类&#x…...
2022年03月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试
一、单选题(共25题,每题2分,共50分) 第1题 已知a“161”,b“16”,c“8”,执行语句da>b and a>c,变量d的值为是? A:0 B:1 C:True D&am…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
