leetcode:20. 有效的括号

一、题目:

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

 

函数原型:bool isValid(char* s)

二、思路:

利用栈来解这道题会方便许多:

遍历字符串s,当遇到左括号就将其压入栈中;遇到右括号首先判断栈是否为空,如果为空说明左右括号数量不匹配返回false,再判断它与左括号是否匹配,如果不匹配返回false,如果匹配则将栈顶元素出栈。全部遍历完成后,如果栈不为空,说明左右括号数量不匹配,返回false,如果栈为空则返回true。

三、代码:

//顺序栈的结构定义
typedef char STDataType;

typedef struct Stack {
	STDataType* a;
	int top;
	int capacity;
}ST;

//顺序栈的初始化
void STInit(ST* pst)
{
	assert(pst);
	pst->a = NULL;
	pst->top = 0;//top指针指向栈顶元素的下一位
	pst->capacity = 0;//顺序栈的容量
}

//顺序栈的打印
void STPrint(ST pst)
{
	for (int i = 0; i < pst.top; i++)
	{
		printf("%d ", pst.a[i]);
	}
	printf("\n");
}

//顺序栈的入栈
void STPush(ST* pst, STDataType x)
{
	assert(pst);
	//检查扩容
	if (pst->top == pst->capacity)
	{
		int newcapacity = pst->capacity == 0 ? 4 : 2 * pst->capacity;
		STDataType* p = (STDataType*)realloc(pst->a, newcapacity * sizeof(STDataType));
		if (p == NULL)
		{
			perror("realloc fail");
			exit(-1);
		}
		else
		{
			pst->a = p;
			pst->capacity = newcapacity;
		}
	}

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

//顺序栈出栈
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);
	return pst->top == 0;
}

//顺序栈销毁
void STDestroy(ST* pst)
{
	assert(pst);
	if (pst->a != NULL)
	{
		free(pst->a);
		pst->a = NULL;
		pst->top = 0;
		pst->capacity = 0;
	}
}


bool isValid(char* s) {
	  //定义顺序栈
    ST st;
    //初始化顺序栈
    STInit(&st);
    int len=strlen(s);
    for(int i=0;i<len;i++)
    {
        if(s[i]=='('||s[i]=='{'||s[i]=='[')
        {
            STPush(&st,s[i]);
        }
        else if(s[i]==')'||s[i]=='}'||s[i]==']')
        {
            if(STEmpty(&st))
                return false;
            else
            {
                if((STTop(&st)=='('&&s[i]!=')')||(STTop(&st)=='{'&&s[i]!='}')||(STTop(&st)=='['&&s[i]!=']'))
                    return false;
                STPop(&st);    
            }
        }
    }
    if(!STEmpty(&st))
        return false;
    else
        return true;
}

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

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

相关文章

Mac- Iterm 2 (替换mac terminal 终端的下一代终端工具)

1.应用场景 主要用于macOS中作为终端工具使用, 执行终端命令, Iterm 2 (替换mac terminal 终端的下一代终端工具) 2.学习/操作 1.文档阅读 chatgpt & 其他资料 2.整理输出 2.1 是什么 Iterm 2 (替换mac terminal 终端的下一代终端工具) 2.2 为什么需要「应用场景」 macOS…

二蛋赠书九期:《机器学习图解》

前言 大家好&#xff01;我是二蛋&#xff0c;一个热爱技术、乐于分享的工程师。在过去的几年里&#xff0c;我一直通过各种渠道与大家分享技术知识和经验。我深知&#xff0c;每一位技术人员都对自己的技能提升和职业发展有着热切的期待。因此&#xff0c;我非常感激大家一直…

关于标准库中的string类 - c++

目录 关于string类 string类的常用接口 string类常用接口的简单模拟实现 关于string类 string类在cplusplus.com的文档介绍 1. string是表示字符串的字符串类 2. 该类的接口与常规容器的接口基本相同&#xff0c;再添加了一些专门用来操作string的常规操作。 3. string在…

css 实现鼠标上移添加下划线

效果图 实现代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…

vue3+elementPlus登录向后端服务器发起数据请求Ajax

后端的url登录接口 先修改main.js文件 // 导入Ajax 前后端数据传输 import axios from "axios"; const app createApp(App) //vue3.0使用app.config.globalProperties.$http app.config.globalProperties.$http axios app.mount(#app); login.vue 页面显示部分…

OpenHarmony 4.1计划明年Q1发布, 5.0预计Q3发布

据HarmonyOS官方组织透露&#xff0c;OpenHarmony 4.0 版本已于 10 月 26 日正式发布&#xff0c;开发套件同步升级到 API 10。开放原子开源基金会现更新了 OpenHarmony 4.1&5.0 版本路线图。据介绍&#xff0c;OpenHarmony 4.1 Beta 版本预计将于年底完成测试并发布&#…

智能座舱架构与芯片- (12) 软件篇 中

三、智能座舱操作系统 3.1 概述 车载智能计算平台自下而上可大致划分为硬件平台、系统软件&#xff08;硬件抽象层OS内核中间件&#xff09;、功能软件&#xff08;库组件中间件&#xff09;和应用算法软件等四个部分。狭义上的OS特指可直接搭载在硬件上的OS内核&#xff1b;…

智能座舱架构与芯片 - (1) 背景篇

一、软件定义汽车 1.1 什么是软件定义汽车 软件定义汽车(Software Defined Vehicles, SDV)的核心思想是&#xff0c;决定未来汽车的是人工智能为核心的软件技术&#xff0c;而不再是汽车的马力大小&#xff0c;是否真皮座椅&#xff0c;机械性能的好坏。软件定义汽车的终极目…

架构探索之路-第一站-clickhouse | 京东云技术团队

一、前言 架构, 软件开发中最熟悉不过的名词, 遍布在我们的日常开发工作中, 大到项目整体, 小到功能组件, 想要实现高性能、高扩展、高可用的目标都需要优秀架构理念辅助. 所以本人尝试编写架构系列文章, 去剖析市面上那些经典优秀的开源项目, 学习优秀的架构理念来积累架构设…

Python+OpenCV裂缝面积识别系统(部署教程&源码)

1.研究背景与意义 随着科技的不断发展&#xff0c;计算机视觉技术在各个领域中得到了广泛的应用。其中&#xff0c;图像处理是计算机视觉中的一个重要分支&#xff0c;它通过对图像进行数字化处理&#xff0c;提取出其中的有用信息&#xff0c;为后续的分析和应用提供支持。而…

基于SSM的校园活动资讯网设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

dolphinscheduler任务莫名重跑

dolphinscheduler运行了一段时间&#xff0c;忽然发现一个流程下某个任务一直在自动重跑&#xff0c;把工作流删了&#xff0c;任务删了&#xff0c;下线等等&#xff0c;都不能阻止他重复的运行&#xff0c;每秒1次&#xff0c;真是见了鬼 1、把zookeeper停掉发现不再重跑了 …

79基于matlab的大米粒中杂质识别

基于matlab的大米粒中杂质识别&#xff0c;数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 79matlab图像处理杂质识别 (xiaohongshu.com)

动态神经网络时间序列预测

大家好&#xff0c;我是带我去滑雪&#xff01; 神经网络投照是否存在反锁与记忆可以分为静态神经网络与动态神经网络。动态神经网络是指神经网络带有反做与记忆功能&#xff0c;无论是局部反馈还是全局反锁。通过反馈与记忆&#xff0c;神经网络能将前一时刻的数据保留&#x…

C语言经典好题:字符串左旋(详解)

这题还是比较简单的&#xff0c;各位看完有收获吗 #include<stdio.h> #include<string.h> void leftturn(char arr[],int k) {int len strlen(arr);for (int i 0;i <k;i)//左旋k个字符{//创建临时变量char tmp 0;tmp arr[0];//将数组第一个字符存储到临时变…

函数模板(成长版)

与普通函数区别&#xff1a;1.多了个template<class T>;2.某些确定类型变不确定类型T 一&#xff1a;引子&#xff1a; #include<iostream> using namespace std; template<typename T> T Max(T a, T b) {return a > b ? a : b; } int main() {int x, …

计算机毕业设计选题推荐-网上产品商城-Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

云原生Docker系列 | Docker私有镜像仓库公有镜像仓库使用

云原生Docker系列 | Docker私有镜像仓库&公有镜像仓库使用 1. 使用公有云镜像仓库1.1. 阿里云镜像仓库1.2. 华为云镜像仓库1.3. 腾讯云镜像仓库2. 使用Docker Hub镜像仓库3. 使用Harbor构建私有镜像仓库4. 搭建本地Registry镜像仓库1. 使用公有云镜像仓库 1.1. 阿里云镜像…

七、HDFS文件系统的存储原理

1、总结 之所以把总结放在文件开头&#xff0c;是为了让读者对这篇文章有更好的理解&#xff0c;&#xff08;其实是因为我比较懒……&#xff09; 对于整个HDFS文件系统的存储原理&#xff0c;我们可以总结为一句话&#xff0c;那就是&#xff1a; 分块备份 2、存储结构和问题…

O-Star|再相识

暑去秋来&#xff0c;岁月如梭&#xff0c;几名"O-Star"们已经入职一段时间&#xff0c;在这期间他们褪去青涩&#xff0c;逐渐适应了公司的工作环境和文化&#xff0c;迈向沉稳&#xff5e; 为了进一步加深校招生之间的交流与了解&#xff0c;提高校招生的凝聚力和…