20.有效的括号-力扣(LeetCode)

server/2024/11/20 23:13:11/

题目:

解题思路:

        首先要明确一个问题:配对的左右括号不一定是相邻的,例如: ( [ ] ) 。

        由上述,'(','[','{' 可能不会在遍历整个字符串的过程中,立即找到配对的括号。括号的配对原则是:当遍历到右括号时去看后出现的左括号是否与之配对,那么很容易想到满足后进先出的特点的结构为栈。

        首先定义一个栈的结构体,为栈和栈的存储空间(根据题目中的提示,存储空间定义足够大)以malloc申请空间并进行初始化。遍历整个字符串,当遇到左括号时,进行入栈操作,当遇到右括号时,进行出栈操作(主要出栈前进行判空操作,防止非法访问空间地址)。遍历完成后,栈中如果还有剩余元素,证明左括号多于右括号,返回false。

        不满足有效括号规则的情况:

        1、当传入字符串长度为奇数时,一定不满足有效括号的规则,返回false。

        2、当遍历到右括号,发现栈为空,已经没有左括号与之配对,返回false。

        3、当遍历到右括号,发现栈顶元素不能与之配对,返回false。

        4、遍历完整个字符串以后,栈中如果还有剩余元素,证明左括号多于右括号,返回false。

代码:

typedef struct
{char *data;//栈的存储空间int count;//栈中元素数量int top;//栈顶
}stack;
bool isValid(char *s)
{if(strlen(s) == 0)return true;if(strlen(s) % 2 == 1)return false;stack *sta = (stack *)malloc(sizeof(stack));//创建栈sta->count = 0;sta->top = -1;sta->data = (char *)malloc(sizeof(char) * 10000);//初始化栈while(*s){if(*s == '(' || *s == '[' || *s == '{'){sta->data[sta->top+1] = *s;//入栈sta->top++;sta->count++;}if(*s == ')'){if(sta->top == -1) return false;//判空if(sta->data[sta->top] == '('){sta->top--;//出栈sta->count--;}elsereturn false;}if(*s == ']'){if(sta->top == -1) return false;//判空if(sta->data[sta->top] == '['){sta->top--;//出栈sta->count--;}elsereturn false;}if(*s == '}'){if(sta->top == -1) return false;//判空if(sta->data[sta->top] == '{'){sta->top--;//出栈sta->count--;}elsereturn false;}s++;}if(sta->count != 0)return false;elsereturn true;
}

http://www.ppmy.cn/server/143560.html

相关文章

15分钟学 Go 第 57 天 :持续集成与持续部署

第57天:持续集成与持续部署 目标:学习CI/CD的基本概念 1. 什么是CI/CD? CI/CD(持续集成和持续部署)是现代软件开发流程中的两大关键实践,它们帮助开发团队快速交付高质量的软件。以下是CI/CD的基本定义&…

淘宝商品爬虫:Python实战指南

在互联网时代,数据的价值不言而喻。对于电商领域来说,获取商品信息是数据分析、市场调研的重要一环。淘宝作为中国最大的电商平台之一,拥有海量的商品数据。本文将带你了解如何使用Python编写爬虫,按照关键字搜索并获取淘宝商品信…

【机器学习】机器学习中用到的高等数学知识-7.信息论 (Information Theory)

熵 (Entropy):用于评估信息的随机性,常用于决策树和聚类算法。交叉熵 (Cross-Entropy):用于衡量两个概率分布之间的差异,在分类问题中常用。 信息论作为处理信息量和信息传输的数学理论,在机器学习中具有广泛的应用。…

CSS一些练习过程

1.字体样式 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title…

云原生之运维监控实践-使用Telegraf、Prometheus与Grafana实现对InfluxDB服务的监测

背景 如果你要为应用程序构建规范或用户故事&#xff0c;那么务必先把应用程序每个组件的监控指标考虑进来&#xff0c;千万不要等到项目结束或部署之前再做这件事情。——《Prometheus监控实战》 去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章&#xff0c;当…

《物理学进展》

投稿指南 《物理学进展》是中国物理学会主办的物理类刊物&#xff0c;双月刊&#xff0c;为国家中文核心期刊。刊稿内容包括物理学的各分支学科&#xff0c;着重反映物理学前沿领域的重大突破和新兴方向中的活跃状态&#xff0c;以及传统和交叉学科的最新进展。稿件类型包括对某…

童年的快乐,矫平机为玩具打造安全品质

童年的快乐&#xff0c;矫平机为玩具打造安全品质 每个人的童年都充满了欢笑和快乐&#xff0c;玩具作为这段时光中不可或缺的伙伴&#xff0c;其安全性和品质尤为重要。矫平机在这个领域扮演着重要角色&#xff0c;它确保了玩具材料的平整和安全&#xff0c;为孩子们的童年增…

高斯数据库Postgresql死锁和锁表解决方法

解决死锁进方法&#xff1a; 查询死锁进程列表 select * from pg_stat_activity where waiting‘t’ 发现有好几条挂起的记录&#xff0c;记录下所有或需要解锁的pid 解决死锁进程 select pg_cancel_backend(‘pid值’) 解决完后&#xff0c;刷新后测试&#xff0c;恢复正…