有效的括号数据结构oj题(力口20)

目录

目录

题目描述

题目分析解析

解决代码

写题感悟:


题目描述

还有实例

题目分析解析

对于这个题目,我们首先有效字符串需要满足什么,第一个左右括号使用相同类型的括号,这好理解,无非就是小括号和小括号大括号和大括号一起匹配。其次第二个就是左括号必须以正确顺序来匹配注意了是顺序,大家以为就是左括号(小括号)遇到左括号(中括号)然后遇到了右括号(小括号)和右括号(中括号),然而恰恰相反,而是小括号(左)、中括号(右)和中括号(右)小括号(右)相依匹配大致就是遇到第一个右括号时,然后与自己最近的左括号进行匹配,假设匹配成功消除,第二个右括号继续匹配最近的括号)。最后就是第三个和我们将的第一个差不多,就是和对应的左括号匹配,但是这里主要是限制只有右括号的情况

接下来就是如何解决问题了。

这里我们根据第二个要求,可以知道当遇到右括号时,需要找到与之最近的左括号匹配,通过这个我们就能想到,当遇到右括号时把后进的左括号与之对比看是否满足相同类型括号。这个后进先出就和我们学过的数据结构栈有关系,所以我们这里需要数据结构栈来写。将遇到的左括号存入栈中,直到遇到右括号(这里还得考虑是否右括号),判断是否匹配成功,只要有一个匹配失败,就说明这个字符串不符合有效字符,以上都符合后,最后判断栈是否还有左括号,如果没有则符号题目要求。

解决代码

//栈结构
typedef char STDataType;
typedef struct Stack
{STDataType* arr;int top;int capacity;
}ST;
//初始化
void StackInit(ST* Stack)
{Stack->arr = NULL;Stack->capacity = Stack->top = 0;
}//入栈
void StackPush(ST* Stack, STDataType x)
{assert(Stack);//空间不够if (Stack->capacity == Stack->top){//扩容int newcapacity = Stack->capacity == 0 ? 4 : 2 * Stack->capacity;STDataType* tmp = (STDataType*)realloc(Stack->arr, newcapacity * sizeof(STDataType));if (tmp == NULL){perror("realloc");exit(1);}Stack->arr = tmp;Stack->capacity = newcapacity;}//空间够Stack->arr[Stack->top++] = x;
}//判断
bool StackEmpty(ST* Stack)
{assert(Stack);return Stack->arr==NULL;
}//出栈
void StackPop(ST* Stack)
{assert(!StackEmpty(Stack));--Stack->top;
}//获取栈中元素
STDataType StackTop(ST* Stack)
{assert(!StackEmpty(Stack));return Stack->arr[Stack->top - 1];
}//获取栈中元素个数
int StackSize(ST* Stack)
{assert(!StackEmpty(Stack));return Stack->top;
}//销毁栈
void StackDestory(ST* Stack)
{if (Stack->arr)free(Stack->arr);Stack->arr = NULL;Stack->capacity = Stack->top = 0;
}bool isValid(char* s) {ST st;
StackInit(&st);
char* cur = s;
while (*cur != '\0')
{//遇到左括号存入栈if (*cur == '('|| *cur == '['|| *cur == '{'){StackPush(&st, *cur);}//遇到右括号取栈顶元素进行对比else{//内部栈为空时(只有右括号时)if(st.top == 0){return false; }char top = StackTop(&st);if (*cur == ')' && top != '('|| *cur == ']' && top != '['|| *cur == '}' && top != '{'){StackDestory(&st);return false;}StackPop(&st);}cur++;
}
if (!StackSize(&st))
{return true;
}
else
{return false;
}
}

写题感悟

        这道题对于初学者的我很难想到尽然会用到数据结构栈,这说明数据结构在刷题过程中发挥着不可磨灭的作用。因此我觉得思路和知识都很重要,当然知识是的重要占大头,没有知识就没有这个思路,就算给你一个思路,也很难实现。我觉得在前期的刷题过程需要刻意取练习,到后面就需要综合去刷,利用自己学到的知识去解决问题,这个题目告诉我如果遇到先进后出或者后进需要先出类似的题目,首先可以考虑栈。

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

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

相关文章

Mock 单元测试

作者:小凯 沉淀、分享、成长,让自己和他人都能有所收获! 本文的宗旨在于通过简单干净实践的方式教会读者,如何使用 Mock (opens new window)进行工程的单元测试,以便于验证系统中的独立模块功能的健壮性。 从整个工程所…

MySQL 深度性能优化配置实战指南

🔧 一、硬件与系统层优化:夯实性能基石 ​​硬件选型策略​​ ​​CPU​​:读密集型场景选择多核CPU(如32核);写密集型场景选择高主频CPU(如3.5GHz+)。 ​​内存​​:建议≥64GB,​​缓冲池命中率≥99%​​ 是性能关键指标。 ​​存储​​:​​必用NVMe SSD​​,I…

Visual Studio Code(VSCode)中设置中文界面

在VS Code中设置中文界面主要有两种方法:通过扩展市场安装中文语言包或通过命令面板直接切换语言。‌方法一:通过扩展市场安装中文语言包‌打开VS Code,点击左侧活动栏的"扩展"图标(或按CtrlShiftX)。在搜索…

叉车机器人如何实现托盘精准定位?这项核心技术的原理和应用是什么?

随着智慧物流和智能制造的加速发展,智能化转型成为提升效率、降低成本的关键路径,叉车机器人(AGV/AMR叉车)在仓储、制造、零售等行业中的应用日益广泛。 其中,托盘定位技术是实现其高效、稳定作业的核心环节之一&…

NO.6数据结构树|二叉树|满二叉树|完全二叉树|顺序存储|链式存储|先序|中序|后序|层序遍历

树与二叉树的基本知识 树的术语结点: 树中的每个元素都称为结点, 例如上图中的 A,B,C…根结点: 位于树顶部的结点, 它没有父结点,比如 A 结点。父结点: 若一个结点有子结点, 那么这个结点就称为其子结点的父…

数据集下载网站

名称简介链接Kaggle世界上最大的数据科学竞赛平台之一,有大量结构化、图像、文本等数据集可直接下载✅支持一键下载、APIPapers with Code可按任务(如图像分类、文本生成等)查找模型与数据集,标注 SOTA✅与论文强关联Hugging Face…

Tomcat 生产 40 条军规:容量规划、调优、故障演练与安全加固

(一)容量规划 6 条 军规 1:线程池公式 maxThreads ((并发峰值 平均 RT) / 1000) 冗余 20 %; 踩坑:压测 2000 QPS、RT 200 ms,理论 maxThreads500,线上却设 150 导致排队。军规 2:…

深入解析 Amazon Q:AWS 推出的企业级生成式 AI 助手

在人工智能助手竞争激烈的当下,AWS 重磅推出的 Amazon Q 凭借其强大的企业级整合能力,正成为开发者提升生产力的新利器。随着生成式 AI 技术席卷全球,各大云厂商纷纷布局智能助手领域。在 2023 年 re:Invent 大会上,AWS 正式推出了…

物流自动化WMS和WCS技术文档

导语大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。欢迎大家使用我们的仓储物流技术AI智能体。新书《智能物流系统构成与技术实践》新书《智能仓储项目出海-英语手册,必备!》完整版文件和更多学习资料,…

Web3.0 实战项目、简历打造、精准投递+面试准备

目录 一、获取真实企业级 Web3.0 项目的 5 种方式 1. 参与开源项目(推荐指数:⭐⭐⭐⭐⭐) 2. 参与黑客松(Hackathon) 3. 远程实习 & DAO 协作项目(兼职也可) 4. Web3 Startup 实战项目合…

pymongo库:简易方式存取数据

文档 基础使用 前提:开发机器已安装mongo配置环境,已启动服务。 macOS启动服务:brew services start mongodb-community8.0 macOS停止服务:brew services stop mongodb-community8.0安装:python3 -m pip install pym…

Java 线程池与多线程并发编程实战全解析:从异步任务调度到设计模式落地,200 + 核心技巧、避坑指南与业务场景结合

多线程编程在现代软件开发中扮演着至关重要的角色,它能够显著提升应用程序的性能和响应能力。通过合理利用异步线程、多线程以及线程池等技术,我们可以更高效地处理复杂任务,优化系统资源的使用。同时,在实际应用中,我…

gitee 分支切换

ssh-keygen -t rsa -C "pengchengzhangcplaser.com.cn" ssh -T gitgitee.comgit remote add origin 仓库地址git config --global user.email "youexample.com"git config --global user.name "Your Name"# 1. 更新远程信息 git fetch origin# …

Vue3生命周期函数

在 Vue 3 中,生命周期钩子函数是指组件从创建到销毁的整个过程中,Vue 自动调用的一些特定函数。它们让你能够在组件的不同阶段执行一些自定义操作。Vue 3 提供了组合式 API 和选项式 API 两种方式来定义生命周期钩子。1. onBeforeMount (组合式 API)作用…

基于SEP3203微处理器的嵌入式最小硬件系统设计

目录 1 引言 2 嵌入式最小硬件系统 3 SEP3202简述 4 最小系统硬件的选择和单元电路的设计 4.1 电源电路 4.2 晶振电路 4.3 复位及唤醒电路 4.5 存储器 4.5.1 FLASH存储 4.5.2 SDRAM 4.6 串行接口电路设计 4.7 JTAG模块 4.8 扩展功能(LED) …

【开源软件推荐】 SmartSub,一个可以快速识别视频/音频字幕的工具

背景介绍 我就说Github上面能找到好东西吧 事情是这样的 我最近在用PC端的剪映剪辑视频 需要用到它的语音转字幕功能 转完之后,导出的时候 发现 赫然有一项字幕识别的会员权益 我寻思看看什么价格 不贵的话就充了 好家伙,这不看不知道&#xff…

自动驾驶仿真领域常见开源工具

自动驾驶仿真领域常见开源工具1、目录1.1 自动驾驶仿真领域常见开源2、地图&场景2.1、场景播放器-Esmini4、被测对象-智驾软件4.1、Autoware4.4、端到端模型-VAD4.5、端到端模型-UniAD4.6、端到端模型-ThinkTwice4.7、端到端模型-TCP5、评价方法5.1、Leaderboard5.2、Bench…

GPU算力租用平台推荐,价格便宜且有羊毛薅,最低只要0.49/小时!

1.趋动云,这是我近期一直在用的,使用体验还不错,推荐给大家 网址:https://platform.virtaicloud.com/gemini_web/auth/register?inviteCode5f74065eac6d8867eac5c82194e2683a 是否选择一个算力平台我认为有几点需要考虑&#xff…

python学智能算法(二十五)|SVM-拉格朗日乘数法理解

引言 前序学习进程中,已经对最佳超平面的求解有了一定认识。 刚好在此梳理一下: 函数距离 首先有函数距离F,也可以称为函数间隔F: Fmin⁡i1...myi(w⋅xib)F \min_{i1...m}y_{i}(w \cdot x_{i}b)Fi1...mmin​yi​(w⋅xi​b) 几何距离 然后…

vscode 源码编译

windows 环境 下载安装 build tools Visual Studio Build Tools 勾选 C 因为安装详细信息里是 v143,所以单个组件里也要追加两个 143 的勾选 点击安装,安装好重启下电脑 Electron 安装失败:connect ETIMEDOUT 20.205.243.166:443 为防Ele…