栈:括号匹配问题!

news2024/11/26 22:50:03

目录

题目:

思路分析:

解题思路:

一、配对:

二、数量问题:

三、细节问题:

完整代码:

手撕栈:


题目:

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

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

 

思路分析:

  • 本题有两个难点,第一个匹配问题,第二个数量问题。
  • 如果匹配有一对匹配失败,需要返回false,如果数量过多或则数量过少,也需要返回false
  • 其次,我们应该如何配对?怎么配对?怎么样才能知道数量的过多或是过少?

解题思路:

在面对这种问题时,可以采取栈的方式进行运算。 

首先,需要手撕一个能够存储括号的栈,其次利用栈内的操作方式进行操作。

其次,根据题目交给的代码,进行接下来的操作。

一、配对:

题目的要求是 (  与 ) 、{ 与 } 、[ 与 ] 、进行对应的配对, 那么使用栈的插入操作,将左括号 (、{ 、[ 进行存储,而右括号进行与入栈的左括号进行配对。

二、数量问题:

数量问题在上一个问题的解答下可以分为两种:

  1. 左括号过多,右括号少,导致剩余的括号数量多了。
  2. 右括号过多,左括号少,导致匹配的次数少了。 

同时,又可以把两个问题变成一个,那就是左括号过多时,左括号过少时,栈内的情况如何?

如果左括号过多,那么就表示匹配结束后栈内不为空,如果左括号过少,在匹配时,栈内就为空。 

所以,需要在匹配的过程中,以及匹配结束后,进行栈内是否为空的判断! 

 

三、细节问题:

输入的字符是根据ASCII数值进行判断的,因为题目是输入一串字符串,且字符串一定会带有结束标语,也就是\0,\0的ASCII值是0,所以这里的循环直接使用*s没有问题!

 

 在循环的末尾中,需要进行++s,表示字符串中的下一个字符开始输入,并进入循环。

完整代码:

 

手撕栈:

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<stdbool.h>

typedef char STDataType;
typedef struct Stack
{
	STDataType* a;
	int top;		// 标识栈顶下一个位置
	int capacity;
}ST;
//栈的初始化
void STInit(ST* pst);
//栈的销毁
void STDestroy(ST* pst);
// 入栈
void STPush(ST* pst, STDataType x);
//出栈
void STPop(ST* pst);
//获取栈顶元素
STDataType STTop(ST* pst);
//检测栈是否为空
bool STEmpty(ST* pst);
//获取栈的有效元素个数
int STSize(ST* pst);

//初始化
void STInit(ST* pst)
{
	assert(pst);

	pst->a = NULL;
	pst->capacity = 0;
	pst->top = 0;
}

//销毁栈
void STDestroy(ST* pst)
{
	assert(pst);

	free(pst->a);
	pst->a = NULL;
	pst->top = pst->capacity = 0;
}

// 栈顶插入删除
void STPush(ST* pst, STDataType x)
{
	assert(pst);

	if (pst->top == pst->capacity)
	{
		int newcapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;
		STDataType* tmp = (STDataType*)realloc(pst->a, sizeof(STDataType) * newcapacity);
		if (tmp == NULL)
		{
			perror("realloc fail");
			return;
		}

		pst->a = tmp;
		pst->capacity = newcapacity;
	}

	pst->a[pst->top] = x;
	pst->top++;
}

void STPop(ST* pst)
{
	assert(pst);
	// 不为空
	assert(pst->top > 0);

	pst->top--;
}

STDataType STTop(ST* pst)
{
	assert(pst);
	// 不为空
	assert(pst->top > 0);

	return pst->a[pst->top - 1];
}
//检测栈是否为空
bool STEmpty(ST* pst)
{
	assert(pst);

	/*if (pst->top == 0)
	{
		return true;
	}
	else
	{
		return false;
	}*/

	return pst->top == 0;
}
//获取栈的有效元素个数
int STSize(ST* pst)
{
	assert(pst);

	return pst->top;
}

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

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

相关文章

微签:电子签章实力派,这19年从幕后走向台前

微签是什么&#xff1f;尽管在电子签章领域已深耕19年 &#xff0c;是国内电子签名市场的拓荒者之一&#xff0c;但因为其低调的风格&#xff0c;一直不为众人所知。不过&#xff0c;如果现在你想对目前市面上的电子签名厂商做一个专业客观的盘点的话&#xff0c;不管从哪个角度…

【论文精读2】R-MVSNet

R-MVSNet【递归多视图立体网络】&#xff0c;论文全名&#xff1a;“Recurrent MVSNet for High-resolution Multi-view Stereo Depth Inference”&#xff0c;CVPR 2019(CCF A) 在MVSNet的基础上做了一些改进&#xff0c;主要解决的问题是代价体正则化&#xff08;Cost Volume…

大语言模型概述|亚马逊这些互联网公司为什么花巨资训练自己的模型?

2023年可谓是大语言模型元年&#xff0c;OpenAI、亚马逊、谷歌等互联网公司争先恐后推出了自己的大语言模型&#xff1a;GPT-4、Titan、PaLM 2&#xff0c;还有亚马逊即将推出的第二个大语言模型Olympus等等。这一革命性技术如今已经在全球范围内引发了广泛的讨论和关注&#x…

用于部署汽车AI项目的全面自动化数据流程

如何创建、优化和扩展汽车 AI 的数据流程 想到汽车行业的人工智能 (AI) 时&#xff0c;脑海中可能会立即浮现未来的道路上遍布自动驾驶汽车的情景。虽然这一切尚未实现&#xff0c;但汽车行业已在 AI 方面取得诸多进步&#xff0c;不仅安全性提高&#xff0c;车内体验也得到改…

餐饮展示小程序的作用是什么

餐饮是市场重要的组成部分&#xff0c;尤其是我国八大菜系&#xff0c;各类细分菜数量非常多&#xff0c;并分布在全国&#xff0c;各类大小品牌餐饮商家数量也非常庞大&#xff0c;每个城市的商业街都是一个接一个餐厅&#xff0c;酒类、酒店多样。 餐饮行业经营痛点比较明显…

C++入门,详解类和对象(1)

类和对象 一&#xff0c;前言二&#xff0c;类的介绍2.1类的引入2.2类的定义 三&#xff0c;类访问限定符及其分装3.1访问限定符说明 四&#xff0c;类的作用域五&#xff0c;类的实例化六&#xff0c;类对象模型6.1类的存储方式6.2类的大小计算 七&#xff0c;this指针7.1this…

Java_static 继承

static static修饰成员变量 static修饰成员变量的应用场景 static修饰成员方法 static修饰成员方法的应用场景 static的注意事项 static的应用知识:代码块 static的应用知识:单例设计模式 饿汉式单例模式 懒汉式单例模式 面向对象三大特征之二:继承 什么是继承 继承的好处 继…

永磁材料测试系统主要应用

1. 产品特征 永磁材料测试系统装置具有独立的电参量校准功能。采用慢速减幅方式对样品退磁。超宽范围的电流连续稳定调节。磁通计的积分器零漂和霍尔探头的非线性误差影响小。系统配置连续可调双极性磁化电源&#xff0c;方便样品的磁化与退磁。测量B或J&#xff1a;采用B或J线…

【开源】基于JAVA的生活废品回收系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 资源类型&资源品类模块3.3 回收机构模块3.4 资源求购/出售/交易单模块3.5 客服咨询模块 四、免责说明 一、摘要 1.1 项目介绍 生活废品回收系统是可持续发展的解决方案&#xff0c;旨在鼓…

使用 MATLAB HDL Coder 和 FPGA 快速实现自动白平衡(AWB)

使用 MATLAB HDL Coder 和 FPGA 快速实现自动白平衡&#xff08;AWB&#xff09; 在此项目中&#xff0c;我们将使用 MATLAB Simulink 和 HDL 编码器创建自定义 IP -- AWB。 MATLAB 设计 自动白平衡模块的设计是使用 HDL Coder 在 MATLAB 和 Simulink 中创建的。HDL Coder能够生…

Vim + YCM + clangd

目录 1. Vim的安装 1.1 Vim安装vim-plug2. 安装YCM3. 进行语言补全配置 3.1 测试效果 1. 目的&#xff1a;让 Vim 像 C/C IDE 一样具备自动补全代码等功能 2. YCM&#xff1a;YouCompleteMe GitHub - ycm-core/YouCompleteMe: A code-completion engine for Vi…

[数据结构]—带头双向循环链表——超详解

&#x1f493;作者简介&#x1f389;&#xff1a;在校大二迷茫大学生 &#x1f496;个人主页&#x1f389;&#xff1a;小李很执着 &#x1f497;系列专栏&#x1f389;&#xff1a;数据结构 每日分享✨&#xff1a;旅行是为了迷路&#xff0c;迷路是为了遇上美好❣️❣️❣️ …

2年博士后|心外医生赴美国耶鲁大学开展研究

G医生决定放弃申报CSC&#xff0c;改为自费出国&#xff0c;并在美国密歇根大学安娜堡分校和耶鲁大学两所名校中选择了更为出名的后者。因为不是CSC出资&#xff0c;G医生得以通过签证&#xff0c;顺利出国&#xff0c;实现了在世界知名高校从事2年博士后的个人职业规划目标。 …

11月15日星期三今日早报简报微语报早读

1、2023胡润女企业家榜出炉&#xff1a;郭得胜夫人邝肖卿首次成为中国女首富&#xff0c;龙湖吴亚军蝉联中国白手起家女首富&#xff1b; 2、叶剑英元帅夫人吴博逝世&#xff0c;享年106岁&#xff1b; 3、外交部&#xff1a;所谓“联合国军”是冷战产物&#xff0c;于法无据…

低代码JNPF,发挥软件定制的威力

目录 1.介绍 2.可视化逻辑编排工具 提供自动化的解决方案 3.功能特色展示 4.结语 近几年&#xff0c;随着低代码与无代码相关话题的火热&#xff0c;逻辑编排作为其重要构成部分也备受关注&#xff0c;集团内外不乏优秀的实践。之前在做技术调研时发现了不少业内逻辑编排相关的…

智能导诊的开发技术有哪些?

智能导诊源码 智能导诊是医疗领域中一项重要的应用&#xff0c;它可以帮助医生和患者更快速、更准确地诊断疾病&#xff0c;提高医疗效率和精度。以下是智能导诊开发技术的几个方面: 1.数据收集整合 智能导诊系统需要收集大量的医疗数据&#xff0c;包括患者症状、病史、检查结…

jenkins+centos7上传发布net6+gitlab

工作中实践了一下jenkins的操作&#xff0c;所以记录一下这次经验 首先安装好jenkins并注册自己的jenkins账号 因为我们的项目代码管理使用的是gitlab&#xff0c;在开始之前先在jenkins上安装gitlab的插件&#xff0c;安装之后应该是要重启jenkins的服务&#xff0c;后续jen…

python+django+mysql个人博客项目部署(VMware部署)

目录 一、Vmware新建win7虚拟机 二、组件/软件安装 2.1 安装python3 2.2 更新pip 2.3 安装pycharm 2.4 安装django 2.5 win安装mysql 三、配置数据库 3.1 安装sqlite客户端 3.2 db.sqlite3导出为myblog.sql 3.3 Heidisql连接本地sql 四、部署项目 4.1 安装模块 4.2 尝试运行 …

python之 flask 框架(2)项目拆分的 执行逻辑

项目的结构图 app.py # 导入__init__.py 比较特殊 from APP import create_appapp create_app() if __name__ __main__:app.run(debugTrue)init.py # __inti__.py # 初始化文件&#xff0c;创建Flask应用 from flask import Flask from .views import bluedef create_ap…

OpenAI 上线新功能力捧 RAG,开发者真的不需要向量数据库了?

近期&#xff0c; OpenAI 的开发者大会迅速成为各大媒体及开发者的热议焦点&#xff0c;有人甚至发出疑问“向量数据库是不是失宠了&#xff1f;” 这并非空穴来风。的确&#xff0c;OpenAI 在现场频频放出大招&#xff0c;宣布推出 GPT-4 Turbo 模型、全新 Assistants API 和一…