【leetcode】20. 有效的括号

有效的括号 题目链接
在这里插入图片描述

// 栈结构
typedef char valuetype;
typedef struct {
	valuetype* arr;
	int top;
	int capacity;
} Stack;

void Init(Stack* stack);

void Push(Stack* stack, valuetype value);
void Pop(Stack* stack);

valuetype Top(Stack* stack);
int Size(Stack* stack);
bool Empty(Stack* stack);

void Destroy(Stack* stack);


bool isValid(char* s) {
	Stack stack;
	Init(&stack);

	while (*s) {
		if (*s == '(' || *s == '[' || *s == '{') {
			Push(&stack, *s); // 1.左括号入栈;
		}
		else { // 2.比较。
			if (Empty(&stack)) { // 2.1右括号比左括号多
				Destroy(&stack);
				return false;
			}
			else { // 2.2 比较左括号与右括号是否匹配
				char ch = Top(&stack);
				Pop(&stack);
				if ((ch == '(' && *s != ')') ||
					(ch == '[' && *s != ']') ||
					(ch == '{' && *s != '}')) {
					Destroy(&stack);
					return false;
				}
			}
		}
		s++;
	}
	// 如果栈里还剩有括号,说明左右括号没有对应
	bool res = Empty(&stack);
	Destroy(&stack);
	return res;
}


void Init(Stack* stack) {
	assert(stack);
	stack->arr = NULL;
	stack->capacity = stack->top = 0;
}

void Push(Stack* stack, valuetype value) {
	assert(stack);
	if (stack->top == stack->capacity) {
		stack->capacity = stack->capacity == 0 ? 10 : (int)(stack->capacity * 1.5);
		stack->arr = (valuetype*)realloc(stack->arr, sizeof(valuetype) * stack->capacity);
		if (stack->arr == NULL) {
			perror("realloc failed in the function Push(Stack*, valuetype).");
			return;
		}
	}
	stack->arr[stack->top++] = value;
}

void Pop(Stack* stack) {
	assert(stack && stack->top > 0);
	stack->top--;
}

valuetype Top(Stack* stack) {
	assert(stack && stack->top > 0);
	return stack->arr[stack->top - 1];
}

int Size(Stack* stack) {
	assert(stack);
	return stack->top;
}

bool Empty(Stack* stack) {
	assert(stack);
	return stack->top == 0;
}

void Destroy(Stack* stack) {
	assert(stack);
	free(stack->arr);
	stack->arr = NULL;
	stack->capacity = stack->top = 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构+算法(第06篇):再不会“降维打击”你就Out了!

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

各类型判空操作

开发中经常遇到需要判空的地方,比如对字符串进行判空操作。 而有时候工具包太多不知道用哪个。 就像下图,光一个 StringUtils 就有十几个包弹出来。 怎么选? 其实用哪个都行。 最重要的是: 有一套自己用的顺手的工具。 或者…

Java基础数据结构之ArrayList源码分析

一.几个常量 这是默认容量 这两个是共享的空对象 这是真正存储元素的地方,现在还没有分配内存 二.构造方法 这是一个无参构造方法,此时让存储元素的数组指向了那个默认容量数组,此时该数组是一个空数组,长度为0. 这是给定初始容量…

C#使用OpenCvSharp4库读取电脑摄像头数据并实时显示

一、OpenCvSharp4库 OpenCvSharp4库是一个基于.Net封装的OpenCV库,Github源代码地址为:https://github.com/shimat/opencvsharp,里面有关于Windows下安装OpenCvSharp4库的描述,如下图所示: 二、C#使用OpenCvSharp4库…

杂题——试题-算法训练-P0604-runaround数

分析: 题目有三个关键点: 一:结束时,回到起始位置(比较结束时和起始时的下标位置是否相同)二:该整数的所有数字都必须遍历一遍,且只能遍历一遍(把遍历过的数字做个标记&a…

【前端-VUE+TS】Vue3组件化-知识补充(六)

一. 动态组件 比如我们现在想要实现了一个功能: 点击一个tab-bar,切换不同的组件显示; 案例截图 这个案例我们可以通过两种不同的实现思路来实现: 方式一:通过v-if来判断,显示不同的组件;方式二…

周润发节俭,排队买廉价盒饭,身价56亿由此省出。

♥ 为方便您进行讨论和分享,同时也为能带给您不一样的参与感。请您在阅读本文之前,点击一下“关注”,非常感谢您的支持! 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 周润发裸捐数十亿,但生活中的他却极度节俭。每一分…

基于SSM的高校社团管理系统

末尾获取源码作者介绍:大家好,我是墨韵,本人4年开发经验,专注定制项目开发 更多项目:CSDN主页YAML墨韵 我欲乘风归去 又恐琼楼玉宇 高处不胜寒 -苏轼 目录 一、项目简介 二、开发技术与环境配置 2.1 SSM框架 2.2 …

UGUI中Text和TextMeshPro实现图文混排方式

一些项目中实现图文混排是自定义一个脚本去继承Text类,然后文本中用富文本的方式进行图片和超链接的定义,在代码中用正则表达式匹配的方式把文本中图片和超链接给替换,如下: TextMeshPro实现是生成SpriteAsset进行图文混排的&…

杂题——试题 算法训练 试题3971 丑数

分析: 判断一个数 n 是否是丑数,分成三个部分 1、寻找因数,从2遍历到 n,如果该数 i 是 n 的因数,就进入下一步2、判断 i 是否是质数,这部分代码直接套用即可,见得较多3、最后判断 i 是否等于2或…

2024 springboot Mybatis-flex 打包出错

Mybatis-flex官网:快速开始 - MyBatis-Flex 官方网站 从 Mybatis-flex官网获取模板后,加入自己的项目内容想打包确保错,先试试一下方法 这里改成skip的默认是true改成false,再次打包就可以了

ATFX汇市:鲍威尔否认3月降息,晚间英央行决议大概率按兵不动

ATFX汇市:今日3:00,美联储公布利率决议结果,维持5.5%的联邦基金利率不变,美元指数五分钟内上涨0.19%,最高触及103.51点。半小时后的3:30,美联储主席鲍威尔开始讲话,美元指数分钟级别剧烈下跌&am…

【服务端性能测试】测试方案设计(实操需要准备的内容)

一般性能测试流程都是:获取测试需求——>测试需求分析——>测试方案设计——>压测环境搭建(目前是线上)——>测试数据准备——>测试脚本准备、调试——>测试脚本执行——>监控数据录入——>测试结果跟开发一起分析—…

设计模式——模板方法模式(Template Method Pattern)

概述 模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。模板方法模式是结…

TCP 协议的相关特性

1. TCP格式 TCP特性:有连接,全双关,面向字节流,可靠传输。(TCP安身立命的本钱,初心就是解决“可靠传输”问题) 其实TCP的特征有很多这里我就简单的介绍几个。 2. 确认应答 其实用来确保可靠性&…

【新课】安装部署系列Ⅲ—Oracle 19c Data Guard部署之两节点RAC部署实战

本课程由云贝教育-刘峰老师出品,感谢关注 课程介绍 Oracle Real Application Clusters (RAC) 是一种跨多个节点分布数据库的企业级解决方案。它使组织能够通过实现容错和负载平衡来提高可用性和可扩展性,同时提高性能。本课程基于当前主流版本Oracle 1…

2024.1.30 GNSS 学习笔记

站星双差Kalman滤波伪距差分定位流程 1. RTK定位技术(实时载波相位差分技术)原理-站间单差浮点解 1.RTK技术其实就是在RTD技术的基础上增加载波观测值的使用。由于伪距的噪声在分米量级,即使我们通过站间单差消除了绝大部分的误差影响&…

前端入门第二天

目录 一、列表、表格、表单 二、列表(布局内容排列整齐的区域) 1.无序列表(不规定顺序) 2.有序列表(规定顺序) 3.定义列表(一个标题多个分类) 三、表格 1.表格结构标签 2.合并…

基于Raspberry Pi的自动巡航与避障系统(二)

在上一篇中,我们讨论了智能小车的避障逻辑实现,在本篇中,我们将进一步扩展智能小车的功能,包括更高级的避障策略、路径规划和导航功能,同时,我们还将提供相应的代码示例,以帮助读者更好地理解和…

Typora导出html文件图片自动转换成base64

Typora导出html文件图片自动转换成base64 一、出现问题二、解决方案三、编码实现3.1.创建Java项目3.2.代码3.3.打包成Jar包 四、如何使用endl 一、出现问题 typora 导出 html 的时候必须带有原图片,不方便交流学习,文件太多显得冗余,只有将图…