当前位置: 首页 > news >正文

C语言/数据结构——每日一题(有效的括号)

一.前言

如果想要使用C语言来解决这道题——有效的括号:https://leetcode.cn/problems/valid-parentheses/description/我们必须要借用上一篇我们所讲的内容——栈的实现:https://blog.csdn.net/yiqingaa/article/details/138923750?spm=1001.2014.3001.5502

因为在C语言环境下,力扣不会主动帮你实现栈,需要用户自己手动创建栈。但是在C++环境下,力扣会主动为我们实现栈。

2.正文 

1.1题目描述

1.2题目分析

1.21 题目想让用户干什么

这道题为我们用户提供了一个字符串s。我们需要编写程序来判断所给字符串s中,相同类型的左括号与右括号是否一 一匹配。如果匹配正确就返回true。匹配不正确就返回false。

 1.22 如何求解题目

这道题我们可以运用栈的知识面来求出这道题。

我们可以先创建一个栈变量st,然后让字符串s逐一遍历字符,如果遍历过程中字符是‘(’    ‘[’   ‘{’   都可以将它们尾插到我们栈当中。如果在遍历过程中不是‘(’    ‘[’   ‘{’ ,而是‘)’    ‘]’   ‘}’我们可以调用之前写好的函数功能——取出栈顶元素( STDataType STTop(ST* ps) 这里的SLDataType是我们栈数据类型,可能是int、char或者其他类型。),调出可能之前存入栈的字符‘(’    ‘[’   ‘{’ ,并与遍历字符作对比。这里我暂且将取出栈顶的元素用变量top接受。我们就有取出栈顶元素,与现在遍历字符的关系:

if ((top == '(' && *s != ')') ||

            (top == '{' && *s != '}') ||

            (top == '[' && *s != ']'))

满足上面其中一个条件我们就可以说明,相同类型的左括号与右括号没有一 一匹配。我们直接返回false即可。

值得注意的是:在返回true,或者false之前,都要对栈进行销毁处理——void STDestroy(ST* ps)

1.3代码实现

typedef int STDataType;
struct Stack
{STDataType* a;int top;int capacity;
};
typedef struct Stack ST;
void STInit(ST* ps);//栈的初始化
void STDestroy(ST* ps);//栈的销毁void STPush(ST*PS,STDataType x);//入栈
void STPop(ST* ps);//出栈STDataType STTop(ST* ps);//取栈顶的数据bool STEmpty(ST*ps);//判空int STSize(ST* PS);//获取数据个数
void STInit(ST *ps)//栈的初始化
{assert(ps);ps->a = NULL;ps->capacity = ps->top = 0;
}
void STDestroy(ST* ps)//栈的销毁
{assert(ps);free(ps->a);ps->a = NULL;ps->top = ps->capacity = 0;
}
void STPush(ST* ps, STDataType x)//入栈
{assert(ps);if (ps->capacity == ps->top){int newcapacity = ps->capacity == 0 ? 10 : ps->capacity*2;STDataType* tmp = (STDataType*)realloc(ps->a, newcapacity * sizeof(STDataType));if (tmp == NULL){perror("realloc fail!");return;}                ps->a = tmp;ps->capacity = newcapacity;}ps->a[ps->top] = x;ps->top++;
}
void STPop(ST* ps)//删除栈顶元素
{assert(ps);assert(ps->a);ps->top--;
}
STDataType STTop(ST* ps)//取出栈顶元素
{assert(ps);assert(ps->top >= 0);return ps->a[ps->top-1];
}
bool STEmpty(ST* ps)//判断栈内元素是否为空
{assert(ps);if (ps->top == 0)return true;return false;
}
int STSize(ST* ps)//获取数据个数
{assert(ps);return ps->top ;
}
bool isValid(char* s) 
{ST st;
STInit(&st);
while (*s)
{if (*s == '(' || *s == '{' || *s == '['){STPush(&st, *s);}else{if(STEmpty(&st))//这一步是必须的,因为如果栈为空且*s是')' ']' '}',说明
//题目给出的字符可能是这样的“)”、“(){}]”。类似这种情况都是不符合题意的情况。return false;char top = STTop(&st);STPop(&st);//这里一定要进行尾部栈顶元素删除,以便遍历字符和栈内字符能够对的上if ((top == '(' && *s != ')') ||(top == '{' && *s != '}') ||(top == '[' && *s != ']')){return false;}}++s;
}
if (st.top != 0)return false;
STDestroy(&st);
return true;
}

三.结言 

今天的题目分享就到此结束了,觉得对你有所帮助的同学,能不能求一个三连。

相关文章:

C语言/数据结构——每日一题(有效的括号)

一.前言 如果想要使用C语言来解决这道题——有效的括号:https://leetcode.cn/problems/valid-parentheses/description/我们必须要借用上一篇我们所讲的内容——栈的实现:https://blog.csdn.net/yiqingaa/article/details/138923750?spm1001.2014.3001.…...

STM32使用旋转编码开关

一、旋转编码开关如何工作 编码器内部有一个开槽圆盘,连接到公共接地引脚 C。它还具有两个接触针 A 和 B,如下所示。 当您转动旋钮时,A 和 B 按照特定顺序与公共接地引脚 C 接触,具体顺序取决于转动旋钮的方向。 当它们与公共地接…...

OneMO同行 心级服务:中移物联OneMO模组助力客户终端寒冷环境下的稳定运行

中移物联OneMO模组以客户为中心,基于中国移动心级服务要求,开展“OneMO同行 心级服务 标定一流”高标服务主题活动,升级“服务内容““服务方式”和“服务意识”,为行业客户提供全新的服务体验。 近日,某车载监控设备…...

爬虫视图展示之 Power BI

实现方式 读取数据的实现 selenium 库 requests 库 存储媒介 MysqlElasticSearch 图表展示 GrafanaPower BI 是什么? Power BI 简单且快速,能够从 Excel 电子表格或本地数据库创建快速见解。 同时 Power BI 也可进行丰富的建模和实时分析&#xff…...

微软刚发布的Copilot+PC为什么让Intel和AMD尴尬?2024 AI PC元年——产业布局及前景展望

美国东部时间5月20日在微软位于华盛顿的新园区举行的发布会上,宣布将旗下AI助手Copilot全面融入Windows系统,能够在不调用云数据中心的情况下处理更多人工智能任务。 “将世界作为一个提示词就从Windows系统开始”。微软的新PC将是“CopilotPC”&#xf…...

抖音视频怎么去水印保存部分源码|短视频爬虫提取收集下载工具

抖音视频怎么去水印保存部分源码|短视频爬虫提取收集下载工具 抖音视频去水印保存部分源码: 通过使用Python中的requests、re和os等库,可以编写如下代码来实现抖音视频去水印保存的功能。 短视频爬虫提取手机下载工具的使用方法: 该工具主…...

类的组合、作用域与可见性、类的静态成员、单例模式、

类的组合 一个类内嵌其他类的对象作为成员的情况 has - a组合 初始化列表的另一用途:为了调用数据成员的带参构造函数 能够层层递进 class Line { public:Line(int x1 0, int y1 0, int x2 0, int y2 0);Line(const Line &other);~Line();Line(const Po…...

高速公路定向广播(声光一体) HT-600D

1、产品概述: HT-600D声光一体平面波IP定向广播是北京恒星科通创新性研发产品,采用公司自主研发的平面波传声技术,该产品具有高声压、强指向性、高清晰度等特点,采用定向声传声技术将声音聚集到正前方定向传输,周边声压级明显降低…...

2024离婚新规已生效,不用等30天冷静期,线上开庭

2024年离婚必知的12条法律知识: ✅分居多久都不会自动离婚,想离婚,必需通过协议或起诉程序离婚 ✅婚后的工资收入,继承的遗产(未指定只给一人)都是夫妻共同财产 ✅没有领结婚证,或领证后没有共同生活&#…...

从零搭建python环境:深入解析虚拟环境与Python版本管理

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:为何需要虚拟环境? 二、虚拟环境的创建与命名 1. 虚拟环境…...

windows安装官方正版notepad++

一 、notepad介绍 Notepad 是一个免费的、开源的文本编辑器,主要面向程序员和高级用户。以下是 Notepad 的特点: 跨平台: 虽然主要为 Windows 平台设计,但可以通过 Wine 在 Linux 和 macOS 上运行。 语法高亮: 自动识…...

netty-socketio 集群随记

实现netty-socketio集群的方式 代码实例 PostConstructpublic void subscribe() {pubSubStore.subscribe(PubSubType.DISPATCH, new PubSubListener<DispatchMessage>() {Overridepublic void onMessage(DispatchMessage message) {log.debug("subscribe: {}"…...

查看目录或文件的磁盘使用情况

在排查问题过程中&#xff0c;会遇到磁盘占满&#xff0c;需要排查具体哪个文件占用比较大&#xff0c;此时可以使用du 命令 du [选项] [文件或目录...] 常用的选项包括&#xff1a; -h 或 --human-readable&#xff1a;以人类可读的格式&#xff08;如 K、M、G&#xff09;…...

如何选择合适的自动化框架

自动化测试框架的选型是一个复杂且重要的过程&#xff0c;需要考虑多个因素以确保所选框架能够满足项目的需求。以下是一些建议的步骤和考虑因素&#xff1a; 1. 明确项目需求&#xff1a; * 首先&#xff0c;要明确项目的测试需求&#xff0c;包括测试的类型&#xff08;如…...

Java面试进阶指南:高级知识点问答精粹(二)

Java 面试问题及答案 1. 什么是Java内存模型&#xff08;JMM&#xff09;&#xff1f;它在并发编程中扮演什么角色&#xff1f; 答案&#xff1a; Java内存模型&#xff08;JMM&#xff09;是一个抽象的模型&#xff0c;它定义了Java程序中各种变量&#xff08;线程共享变量&…...

thinkphp 使用模型实现多表连接查询

解决问题&#xff0c;多张表的查询连接问题&#xff0c;3张表及以上 爷爷表 有字段id 爸爸表 有字段id&#xff0c;grandfather_id 儿子表 id,parent_id 控制器中编写 public function getdata(){ $data model(爷爷表)->with([father.son])->select(); var_dump($data…...

LeetCode674:最长连续递增序列

题目描述 给定一个未经排序的整数数组&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r&#xff08;l < r&#xff09;确定&#xff0c;如果对于每个 l < i < r&#xff0c;都有 nums[i] < nums…...

Java技术精粹:高级面试问题与解答指南(一)

Java 面试问题及答案 问题1&#xff1a;请解释Java中的多态性&#xff0c;并给出一个例子。 答案&#xff1a; 多态性是Java中的一个重要特性&#xff0c;它允许一个引用类型可以指向多种实际类型的对象&#xff0c;并且可以通过这个引用调用实际对象的方法。多态性主要通过继…...

数据可视化技术头歌测试合集

努力是为了不平庸~ 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰 目录 时间趋势可视化-柱形图 第1关&#xff1a;“大胃王”比赛数据柱形图绘制——绘制柱形图的基本步骤 任务描述 相关知识 观察和处理数据 绘…...

【linux-IMX6ULL-字符设备驱动简单框架实验】

目录 1. 字符设备驱动简介1.1 重要函数1.2 简单框架代码流程1.3 linux中关于驱动的重要命令 2. 字符设备驱动简单框架编写2.1 添加LICENSE信息2.2 驱动模块的入口与出口2.3 入口和出口函数的编写2.4 设备操作结构体定义2.4.1 结构体函数内容填充 3. 应用程序简介&#xff1a;4.…...

3D模型旋转显示不全怎么办---模大狮模型网

在3D建模和渲染过程中&#xff0c;我们有时会遇到旋转模型时显示不全的问题。这种情况可能由多种原因造成&#xff0c;包括模型本身的问题、软件设置不当、硬件配置不足等。本文将为您详细介绍几种可能的解决方法&#xff0c;帮助您解决3D模型旋转显示不全的问题。 一、检查模型…...

DLRover:蚂蚁集团开源的AI训练革命

在当前的深度学习领域&#xff0c;大规模训练作业面临着一系列挑战。首先&#xff0c;硬件故障或软件错误导致的停机时间会严重影响训练效率和进度。其次&#xff0c;传统的检查点机制在大规模训练中效率低下&#xff0c;耗时长且容易降低训练的有效时间。资源管理的复杂性也给…...

ubuntu_概念

su(switch user) wget(Web Get) cd(change directory) dpkg(Debian Packager)为 “Debian” 专门开发的套件管理系统&#xff0c;方便软件的安装、更新及移除。 chmod(Change Mode)用于改变文件或目录的权限 ps(Process Status)进程状态 grep(Global Regular Expression Print)…...

Oracle递归查询笔记

目录 一、创建表结构和插入数据 二、查询所有子节点 三、查询所有父节点 四、查询指定节点的根节点 五、查询指定节点的递归路径 六、递归子类 七、递归父类 一、创建表结构和插入数据 CREATE TABLE "REGION" ( "ID" VARCHAR2(36) DEFAULT SYS_GUI…...

FaceFusion源码框架解读

FaceFusion源码框架解读 我的视频讲解&#xff1a;FaceFusion入门教学 FaceFusion官网 FaceFusion是一款开源的AI换脸工具&#xff0c;一款非常好用的换脸工具&#xff0c;操作简单&#xff0c;上手容易。 Facefusion&#xff1a;GitHub - facefusion/facefusion: Next gene…...

React项目知识积累(三)

1.primary-color 公共样式 less文件中的primary-color&#xff0c;会在config.js中的theme中统一写,方便统一更改。 config.js: theme{"primary-color":"#f0f0f0"&#xff0c;"font-size":"16px", }less: .classname{color:primary-…...

前端实现打印功能

1、引入打印相关的库 在您的Vue项目中,需要先安装一个用于打印的库,如print-js。您可以通过以下命令安装&#xff1a; npm install print-js --save2、在组件中引入并使用&#xff0c;在需要实现打印功能的组件中&#xff0c;先import print-js模块&#xff1a; import print…...

创建型模式之工厂模式

文章目录 概述1.简单工厂概念结构图 2.工厂方法概念结构图 3.抽象工厂概念结构图 小结 概述 工厂模式用来创建不同但是相关类型的对象&#xff08;继承同一父类或者接口的一组子类&#xff09;&#xff0c;由给定的参数来决定创建哪种类型的对象。 其实&#xff0c;工厂还可以…...

「动态规划」按摩师

力扣原题链接&#xff0c;点击跳转。 一个有名的按摩师会收到源源不断的预约请求&#xff0c;每个预约都可以选择接或不接。在每次预约服务之间要有休息时间&#xff0c;因此她不能接受相邻的预约。给定一个预约请求序列nums&#xff0c;总共有n个预约&#xff0c;替按摩师找到…...

小程序-滚动触底-页面列表数据无限加载

// index/index.vue <template> <!-- 自定义导航栏 --> <CustomNavbar /> <scroll-view scrolltolower"onScrolltolower" scroll-y class"scroll-view"> <!-- 猜你喜欢 --> <Guess ref"guessRef" /> </s…...