【leetcode】20.有效的括号

news/2024/11/23 9:40:54/

题目分析:
给定的字符串s可能为空串,空串返回false,不为空串时进行以下操作

遍历字符串,左括号 '(' 、 '[' 、 '{' 压栈,右括号与此时的栈顶元素对比匹配

1️⃣匹配,则栈顶元素出栈,继续遍历字符串

2️⃣不匹配:分为空栈和非空栈两种情况

  • 空栈:则数量不匹配,返回false
  • 非空栈:右括号与栈顶元素不匹配,返回false

以上情况没有返回,即字符串遍历结束没有返回,此时需要判断栈的情况,栈空则所有右括号匹配成功,返回true;栈非空则说明有左括号未匹配成功,返回false

📖Note:

C语言中没有栈,我们需要自己进行栈及栈的相关操作的定义

以下为参考代码:

#define SDataType char
//定义栈
typedef struct stack
{SDataType* a;int top;int capacity;
}ST;
//初始化
void StackInit(ST* ps)
{assert(ps);ps->a = NULL;ps->top = ps->capacity = 0;
}//销毁
void StackDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->top = ps->capacity = 0;
}
//压栈
void StackPush(ST* ps, SDataType x)
{assert(ps);//扩容if (ps->top == ps->capacity){int newcapacity = ps->capacity == 0 ? 4 : (ps->capacity) * 2;SDataType* tmp = realloc(ps->a, newcapacity * sizeof(SDataType));//扩容失败if (tmp == NULL){perror("realloc fail");exit(-1);}//扩容成功ps->a = tmp;ps->capacity = newcapacity;}//插入数据ps->a[ps->top] = x;ps->top++;
}
//判断栈空
bool StackEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}
//出栈
void StackPop(ST* ps)
{assert(ps);if(!StackEmpty(ps)){ps->top--;}
}//访问栈顶元素
SDataType StackTop(ST* ps)
{assert(ps);if(!StackEmpty(ps)){return ps->a[ps->top-1];}return -1;}bool isValid(char * s){ST st;StackInit(&st);while(*s){//左括号压栈if(*s == '(' || *s == '[' || *s == '{'){StackPush(&st, *s);}//右括号则与栈顶元素比较是否匹配else{//空栈:括号数量不匹配if(!StackEmpty){StackDestroy(&st);return false;}//非空栈char ch = StackTop(&st);StackPop(&st);if(*s == '}' && ch != '{' || *s == ']' && ch != '[' || *s == ')' && ch != '('){StackDestroy(&st);return false;}}++s;}//此时栈不为空,则数量不匹配,即有左括号未匹配;栈为空即所有括号匹配成功bool flag = StackEmpty(&st);StackDestroy(&st);return flag;;}


http://www.ppmy.cn/news/1043238.html

相关文章

android平台的语音聊天助手源码

目录 1 android平台的语音聊天助手源码 1.1 Setting 1.1.1 getChildList 1.1.2 getGroupList 1.1.3 setListener android平台的语音聊天助手源码 Setting getCh

219、仿真-基于51单片机L298直流电机开始停止正反转加减速Proteus仿真设计(程序+Proteus仿真+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一&a…

2023 最新 小丫软件库app开源源码 PHP后端

上传了源码解压之后,在admin/public/config.php修改后台登录账号和密码 后台地址:域名或者ip/admin 然后自己修改配置即可 后端搭建完成,现在导入iapp源码 导入iapp源码之后,修改mian.iyu载入事件的对接api和url就可以打包了 sss …

保护隐私与知识产权:算法备案的核心目的

在一个日益数字化的世界里,我们的生活、工作和娱乐都与算法有关。算法现已成为推动技术进步的重要力量,从推荐系统、自动化驾驶到人工智能医疗诊断,它们都为我们的生活带来了便利。但是,随着算法的广泛应用,隐私和知识…

前端-ES6

let 和 const 为了解决var的作用域的问题,而且var 有变量提升,会出现全局污染的问题 let 块状作用域,并且不能重复声明const 一般用于声明常量,一旦被声明无法修改,但是const 可以声明一个对象,对象内部的…

使用Julia实现A*路径寻找算法:一个深入的指南

第一部分:简介与背景 1. 引言 Julia,作为一种高效、灵活且易于学习的编程语言,逐渐在科学计算、数据分析和机器学习等领域中占据一席之地。当我们谈到路径规划或游戏开发时,A_算法(A Star Algorithm)常常…

mysql 超大 sql 文件导入过程

问题 最近遇到 2 个超大 sql 文件导入,好一通折腾 文档在哪里 调优参数太多,文档都看不过来 找到这些参数也费劲, ubuntu 在 /etc/mysql/mysql.conf.d/mysqld.cnf 中找到这个链接 ...... # # The MySQL Server configuration file. # # For explanat…

【傅里叶级数与傅里叶变换】数学推导——3、[Part4:傅里叶级数的复数形式] + [Part5:从傅里叶级数推导傅里叶变换] + 总结

文章内容来自DR_CAN关于傅里叶变换的视频,本篇文章提供了一些基础知识点,比如三角函数常用的导数、三角函数换算公式等。 文章全部链接: 基础知识点 Part1:三角函数系的正交性 Part2:T2π的周期函数的傅里叶级数展开 P…