【牛客刷题专栏】0x01:有效括号序列(数据结构栈)

括号序列【刷题记录】 一、题目描述 给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。 输入:"[" 返回值:false 输入:"[]" 返回值:true 二、解题思路 (一) 栈+哈希表 算法流程 1、构建哈希表 k,其中key为 右括号,value为左括号 2、遍历字符串 1).判断字符是否在 k.values() 中; 若在其中则字符入栈; 否则判断栈是 阅读详情

前言


问题描述:

  • 给出一个仅包含字符’(‘,’)‘,’{‘,’}‘,’[‘和’]',的字符串,判断给出的字符串是否是合法的括号序列
    括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。

数据范围:字符串长度 0≤n≤10000
要求:空间复杂度 O(n),时间复杂度 O(n)


输入描述:

一个" "中只含()[]{}的字符。


输出描述:

合法输出"true”;
不合法输出“false”。


举例:

//输入:
()[]{}
//返回值:
true

代码结果:

  • 本题和核心是使用栈实现括号匹配的过程,代码如下
char trans(char char_r) { //实现一个转换函数
    if (char_r == ')')return '(';
    if (char_r == ']')return '[';
    if (char_r == '}')return '{';
    return 0;
}

bool isValid(char* s ) {
    char* stack;
    int topIdx = 0;
    stack = (char*)malloc(strlen(s) * sizeof(char)); //stack就指向一个有s长度*sizeof(char)个连续空间的首地址,stack+1就是第二个空间的地址。简单总结就是申请空间,有多少空间就有多少地址。
    //C库函数(size_t strlen(const char *str) ;)计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
    //(char*)malloc(x*sizeof(char));假设x=2,那么就是申请了2个连续的字节,也就有2个连续的地址,但是返回的是首地址。因为空间是连续的,所以可以通过首地址计算其他地址。
    for (int i = 0; i < strlen(s); i++) 
    { //循环遍历
        if (s[i] == '(' || s[i] == '[' ||s[i] == '{') 
        { //是前括号则赋值进堆区,即入栈
            stack[topIdx++] = s[i]; //赋值后++,topIdx始终指向栈顶的下一个
        }
        if (s[i] == ')' || s[i] == ']' ||s[i] == '}') 
        { //是后括号则判断匹配,即出栈
            if (topIdx < 1)return 0; //栈空了还有后括号,则报错
            if (stack[topIdx - 1] == trans(s[i])) 
            { //使用栈顶进行匹配
                stack[--topIdx] ='\0'; //匹配成功,消去栈顶,即赋值'\0',栈顶变化为前一个值,指向的为栈顶的下一个,相当于出栈操作
            } else return 0; //匹配失败则报错
        }
    }
    if (strlen(stack) > 0)return 0; //申请的空间内还有东西,则栈未空,则报错
    else return 1;//申请的空间首地址内容都是'\0',相当于栈空了,则报对
}

在这里插入图片描述

结束语

【Python刷题篇】——Python入门 010 内置函数(二) 计算机内部都由二进制组成,但是早就习惯使用十进制的牛牛根本不知道这个数字的二进制是什么,你能使用bin函数帮助他将十进制数字转换成二进制吗? 阅读详情

相关推荐

固定翼飞行器建模(一)——六自由度动力学

前两期文章讲完了气动力和气动力矩的模型,本期将来讲解一下六自由度部分的动力学与运动学方程。

2302_80148937的博客 1万+

给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列java实现

题目描述 给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。 思路:逐个遍历字符串,遇到'(','{','['就压入栈,遇到')','}',']'则弹出栈顶字符,判断是否合法,最后检查栈是否为空,为空则是合法括号序列。 im...

WukongGo的博客 6580

YoloV10改进策略:卷积篇|基于PConv的二次创新|附结构图|性能和精度得到大幅度提高(独家原创)

在PConv的基础上做了二次创新,创新后的模型不仅在精度和速度上有了质的提升,还可以支持Stride为2的降采样。改进方法简单高效,需要发论文的同学不要错过!

m0_47867638的博客 1095

面试必考真题-算法篇:给出一个仅包含字符‘(‘,‘)‘,‘{‘,‘}‘,‘[‘和‘]‘,的字符串,判断给出的字符串是否是合法的括号序列。

面试必考真题-算法篇 牛客网 栈 字符串 题目描述 给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列。 括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。 示例1 输入 "[" 返回值 false 示例2 输入 "[]" 返回值 true 示例3 输入 "[()]" 返回值 true 题目分析 利用栈来进行判断,当遇到左括号

gaozhuang63的博客 3066

手把手教你学Simulink--单相逆变器模糊逻辑控制策略仿真

本文介绍了在Simulink中设计单相逆变器模糊逻辑控制策略的完整流程。主要包括:1)构建单相逆变器模型;2)使用FuzzyLogicToolbox设计模糊控制器,定义输入输出变量和模糊规则;3)将控制器集成到Simulink模型;4)添加干扰源和示波器;5)配置仿真参数并分析结果。该方法利用模糊控制处理非线性系统的优势,可实现输出电压的精确跟踪,具有良好的鲁棒性。文中提供了详细的步骤说明和示例代码,强调准确设计隶属函数和规则库对控制性能的关键作用。该仿真设计为电力电子控制系统的开发提供了有效支持。

MHD0815的博客 200

SAP 系统和银行系统通过 SM2 加密算法进行集成

SM2 是基于椭圆曲线离散对数问题(ECDLP)的一种公钥密码算法。椭圆曲线加密的核心原理,是利用了一个数学难题:在椭圆曲线群上,已知曲线上两点的运算结果,逆向推导出这两个点的具体信息是非常困难的。这样的复杂度使得基于椭圆曲线的密码体制比传统的 RSA 更加难以破解。在 SM2 加密中,公钥和私钥的生成与传统的椭圆曲线加密类似。选择一个椭圆曲线和一个基点 P。使用私钥 d,计算公钥 P’ = d * P。私钥 d 保密,而公钥 P’ 可公开分发,用于加密数据。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1212

给定一个只包含字符’(’,’)’,’{’,’}’,’[‘和’]‘的字符串,判断输入字符串是否有效

方式一: 遍历整个字符串,若前一项与后一项可以配对,则将此对从原字符串中删除。 let s = '{}[]{{]}' function fn(s) { if (s.length && s.length % 2 !== 0) { return false } s = s.split('') for (let i =0;i< s.length; i++) { if(s[i-1] &&am

Kratial的博客 1346

嵌入式模拟电路面试题大全及参考答案(持续更新)

高输入阻抗:由于晶体管的基极-发射极(BJT)或栅极-源极(MOSFET)电压很低,跨导放大器具有很高的输入阻抗。低输出阻抗:晶体管的集电极-发射极或漏极-源极电阻较低,提供较低的输出阻抗。电压控制:输入信号控制晶体管的跨导,从而控制输出电流。晶体管:作为放大器的核心,可以是BJT或MOSFET。偏置电路:为晶体管提供稳定的工作点,确保其在放大区域内工作。负载电阻:与晶体管的集电极或漏极连接,将电流转换为电压。晶体管的选择:根据所需的增益、速度和功率消耗选择合适的晶体管。偏置稳定性。

大模型大数据攻城狮的专栏 989

2021-04-05

一、括号序列 给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。 //用栈解决 class Solution { public: /** * * @param s string字符串 * @return bool布尔型 */ bool isValid(string s) {

zxc1273392600的博客 659

YOLO26改进策略【Neck】| ICCV2025 反向卷积 Converse2D 数学逆运算提重构 + 特征域建模降伪影,提升多尺度目标检测精度

本文记录的是利用Converse2D 算子改进 YOLO26 的上采样。(Converse 2D Convolution)通过正则化最小二乘闭式解与深度化空间建模结合,实现YOLO26特征提取与上采样阶段的卷积逆运算及特征精准重构。本文利用算子,通过闭式解的非迭代计算还原卷积下采样后的原始特征,再通过可学习核与自适应正则化参数稳定逆问题求解,同时依托圆形填充与插值初始估计保留特征高频细节,对YOLO26中不同尺度检测目标的特征进行针对性重构强化、抑制卷积/转置卷积带来的伪影与信息损失干扰,在特征融合与上采样

Limiiiing的博客 655

基于STM32的智慧农业大棚监测与控制系统设计与实现

摘要:本文设计了一种基于STM32F103C8T6单片机的智慧农业大棚监测与控制系统,集成多参数环境监测、智能控制和远程管理功能。系统可实时采集光照、CO2、温湿度和土壤湿度等参数,通过OLED显示并采用双模式控制机制:自动模式下根据阈值调节设备,手动模式下支持APP或按键控制。通过ESP8266模块接入机智云平台实现数据云存储和远程控制。测试表明系统具有高精度(温度±0.5℃、CO2±50ppm)、快速响应(<2s)和稳定运行(30天无故障)等特点,有效解决了传统大棚调控不及时等问题。创新点包括多参

3254968421的博客 485

【算法刷题篇】——算法入门 01 数据结构——栈(一)

栈的特点:1.只能对栈顶进行添加或者弹出,2.后进先出。

Python全栈系列 2455

Far planner 代码系列(33) 关于real_world_contour和contour_graph

我们知道far planner前部分的流程是这样子的: 对于特定的地图,如下: 我们要从surround_obs_cloud里抽取生成realworld_contour_,如下图所示: 在这时候,每个node的z坐标都是以机器人的高度定的。如图所示: 先去吃饭啦~待会回来在写 ...

博客 763

【NOWCODER】- Python:内置函数(二)

【NOWCODER】- Python:内置函数(二)

啊Q老师 2399

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

牛客小白月赛94 解题报告 | 珂学家 | 茴字有36种写法

很久没写题解了,有幸参加了94小白月赛内测,反馈是很nice,AK场。争议的焦点在于哪题最难你选哪题呢?

m0_66102593的博客 625

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

算法实战论01(双指针篇一):双指针的核心思想与应用场景总结

双指针算法实战解析 双指针算法是解决数组和链表问题的有效技巧,主要包括对撞指针和快慢指针两种形式。本文通过两个实战案例详细讲解双指针的应用: 移动零问题: 使用双指针将数组分为零和非零两部分 定义cur指针遍历数组,dest指针标记非零元素末尾 通过交换操作实现零元素后移 时间复杂度O(n),空间复杂度O(1) 复写零问题: 先模拟异地操作确定指针初始位置 再从后向前进行本地复写操作 处理边界情况如数组末尾溢出 时间复杂度O(n),空间复杂度O(1) 这两个案例展示了双指针在数组分块问题中的典型应用,通过指

小此方的博客 620

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

小米算法题 给出一个仅包含字符‘(‘,‘)‘,‘{‘,‘}‘,‘[‘和‘]‘,的字符串,判断给出的字符串是否是合法的括号序列java实现

import java.util.*; public class Solution { public boolean isValid(String s) { if(s==null) return true; if(s.length()%2==1) return false; Stack<Character> stack=new Stack<Character>(); .

qq_33240556的博客 675

刷题-牛客算法入门

AB3 有效括号序列 描述 给出一个仅包含字符’(‘,’)‘,’{‘,’}‘,’[‘和’]',的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。 数据范围:字符串长度0≤n≤10000 要求:空间复杂度O(n),时间复杂度O(n) 我的实现: 很简单的一道题,但是我却做复杂了。我是直接将左括号(“({[”)加入到栈中,然后拿右括号去比对,else if里面写的很复杂,并且可以直接用pop()的,因为不一样直

m0_65323355的博客 547

leetcode 49 最长的括号子串: 给出一个仅包含字符‘(‘和‘)‘的字符串,计算最长的格式正确的括号子串的长度。python

NC49 最长的括号子串 题目描述: 给出一个仅包含字符’(‘和’)'的字符串,计算最长的格式正确的括号子串的长度。 对于字符串"(()“来说,最长的格式正确的子串是”()",长度为2. 再举一个例子:对于字符串")()())",来说,最长的格式正确的子串是"()()",长度为4. 示例1 输入 “(()” 返回值 2 注意:连续有效的括号对数,不连续的不算 比如 (((())))(((()) 连续有效的括号对数 就是前四对 第九个 第十个 不能配对 所以后面的 两对 不能算是 连续有效的 这是小弟写的 水

q339179198的博客 1152

NC52 括号序列

描述 给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。 示例1 输入: "[" 返回值: false 示例2 输入: "[]" 返回值: true 栈操作 # # # @param s string字符串 # @return bool布尔型 # stack = [] def match(c1 ,

Nayido的博客 405

给出一个仅包含字符'('和')'的字符串,计算最长的格式正确的括号子串的长度java实现

题目描述 给出一个仅包含字符'('和')'的字符串,计算最长的格式正确的括号子串的长度。 对于字符串"(()"来说,最长的格式正确的子串是"()",长度为2. 一些实例: 对于字符串")()())",来说,最长的格式正确的子串是"()()",长度为4 对于字符串"()(())"来说,最长的格式正确的子串是"()(())", 长度为6 对于字符串"())()"来说,最长的格式正确的子串是...

WukongGo的博客 2304

leetcode 52 多种括号合法序列 :给出一个仅包含字符‘(‘,‘)‘,‘{‘,‘}‘,‘[‘和‘]‘,的字符串,判断给出的字符串是否是合法的括号序列,括号必须以正确的顺序关闭python

leetcode 多种括号合法序列 python 题目描述 给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。 示例1 输入 “[” 返回值 false 示例2 输入 “[]” 返回值 true def is_valid(s): if len(s)%2==1: return False while '[]' i

q339179198的博客 945

判断括号的合理性

给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。 本次题目主要考察了栈的思想,采用假设的方法,如果该字符串是合法的,每一个左括号一定会对应一个右括号,所以在出栈的时候一定是和当前所对应的字符一样。 public static boolean isValid(String s){ Stack<Character> sta.

guoshuyan12的博客 307

2021-07-16

# 字符重排和统计 题目 给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数,并按照字母出现次数从大到小的顺序输出各个字母及其出现次数。如果次数相同,按照自然顺序进行排序,且小写字母在大写字母之前。 ##Java 代码实现 import java.io.*; import java.util.*; public class Main{ public static void main(String[] args){ BufferedReader

qq_26310235的博客 461

LeetCode-括号序列-C++-判断括号是否合法

一、题目 题目描述 给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。 示例1 输入 "[" 返回值 false 示例2 输入 "[]" 返回值 true 二、解题思路 1、利用栈来解决 1.1 如果碰到’(’、 ‘{’、 ‘[’,就往栈里添加’)’、 ‘}’ 、’]’ 1.2 判断新的一个是否和top()相同,如果不相同或者栈为空,

weixin_45794299的博客 1310

【PTA】最长的括号子串 模拟

给出一个长度为 n 的,仅包含字符 ‘(’ 和 ‘)’ 的字符串,计算最长的格式正确的括号子串的长度。 例1: 对于字符串 “(()” 来说,最长的格式正确的子串是 “()” ,长度为 2 . 例2:对于字符串 “)()())” , 来说, 最长的格式正确的子串是 “()()” ,长度为 4 . 字符串长度:0≤n≤5∗10 5 输入格式: 只由’(’ 和 ‘)’ 组成的字符串。 输出格式: 输出最长的合法括号子串的长度。 输入样例: )()()) 输出样例: 4 一个精巧的模拟,技巧是:下标入栈,而不

karshey的博客 822
上一篇: 【C语言数据结构】06.队列
下一篇: 【牛客刷题专栏】0x02:带头节点单链表实现C数据结构栈
不僈
博客等级 码龄8年 2万+粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不僈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值