【每日OJ—有效的括号(栈)】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

前言

1、有效的括号题目:

1.1方法讲解:

1.2代码实现:

总结


前言

世上有两种耀眼的光芒,一种是正在升起的太阳,一种是正在努力学习编程的你!一个爱学编程的人。各位看官,我衷心的希望这篇博客能对你们有所帮助,同时也希望各位看官能对我的文章给与点评,希望我们能够携手共同促进进步,在编程的道路上越走越远!


提示:以下是本篇文章正文内容,下面案例可供参考

1、有效的括号题目:

1.1方法讲解:

解题思路:

栈的规则:后入先出。我们这道题用栈来解答。

步骤:1、遍历字符串;

2、让字符串中的左括号’(‘,‘[’, ‘{’入栈;

3、如果遇到右括号’)’ ‘]’ ‘}’就出栈,让栈顶出来的左括号与右括号进行匹配。

在对左、右括号匹配时,可能会出现以下几种情况:

1、右括号比左括号多,数量匹配问题,返回false;

2、左括号比右括号多,数量匹配问题,返回false;

3、全是左括号或者全是右括号,数量匹配问题,返回false。

1.2代码实现:

typedef int STDataType;
typedef struct stack
{STDataType* a;int top;//标识栈顶的位置int capacity;
}ST;//初始化
void STInit(ST* pst);
//销毁
void STDestory(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;//表示top指向栈顶元素的下一个位置pst->top = 0;//表示top指向栈顶元素//pst->top = -1;pst->capacity = 0;
}
//销毁
void STDestory(ST* pst)
{assert(pst);free(pst->a);pst->a = NULL;pst->capacity = pst->top = 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);//判断数组栈为空//1、如果top是指向栈顶元素的下一个位置,那当top == 0时,栈为空//2、如果top时指向栈顶元素,那当top == -1时,栈为空/*if (pst->top == 0){return true;}else{return false;}*/return pst->top == 0;
}//统计栈内元素个数
int STSize(ST* pst)
{assert(pst);//1、如果top指向栈顶元素的话,栈内元素的个数为top+1;//2、如果top指向栈顶元素的下一个位置的话,栈内元素的个数为top;return pst->top;
}bool isValid(char* s) {//同一个域里面不能有同一个变量ST st;STInit(&st);while(*s){//遍历字符串//如果是左括号就入栈if(*s == '[' || *s == '(' || *s == '{'){STPush(&st,*s);s++;}else{//右括号多,左括号少的数量匹配问题if(STEmpty(&st)){STDestory(&st);return false;}//如果是右括号,就从栈中取出一个左括号来进行匹配char top = STTop(&st);STPop(&st);//顺序不匹配if((*s == '}' && top != '{') || (*s == ']' && top != '[')|| (*s == ')' && top != '(')){STDestory(&st);return false;}s++;}}//栈为空,返回真,说明数量匹配//匹配问题:左括号多,右括号少bool ret = STEmpty(&st);STDestory(&st);return ret;
}


总结

好了,本篇博客到这里就结束了,如果有更好的观点,请及时留言,我会认真观看并学习。
不积硅步,无以至千里;不积小流,无以成江海。

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

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

相关文章

系统架构设计师教程(五)软件工程基础知识

软件工程基础知识 5.1 软件工程5.1.1 软件工程定义5.1.2 软件过程模型5.1.3 敏捷模型敏捷开发的特点敏捷方法的核心思想主要敏捷方法简介 5.1.4 统一过程模型 (RUP)RUP的生命周期RUP中的核心概念RUP的特点 5.1.5 软件能力成熟度模型 5.2 需求工程5.2.1 需求获取需求获取的基本步…

CAN静默回环模式测试

本文章主要用于 看自己写的CAN协议代码是否正确 然后因为只有一块板子,不能通信的情况 can.h #ifndef __CAN_H #define __CAN_H#include "head.h"extern FlagStatus can0_receive_flag; extern FlagStatus can0_error_flag; extern can_trasnmit_messag…

HashMap扩容机制详解

目录 1. 扩容的触发条件 2. 扩容的具体步骤 2.1 计算新的容量 2.2 创建新的桶数组 2.3 将元素重新分配到新的桶数组中 2.4 更新容量和阈值 3. 与并发性能的关系 4. 扩容的性能优化 5. 总结 HashMap是Java中常用的数据结构之一,用于存储键值对。在HashMap内…

Electron 打开开发者工具 devtools

Electron 打开开发者工具 devtools 在electron开发的过程中,可以用代码控制打开自带chrome的devtools开发者工具,进而调试渲染教程页面。 平时,我们利用chrome要调试网页的时候,按F12(mac下面是shift花i)…

sql 数据类型注入+tamper

数据类型 数字型 0-9 查询语句: $sql"select * from sy_guestbook where id$i"; 字符型 a-z 中文 标点符号 加入了单引号 查询语句: $sql"select * from sy_guestbook where gTpl$g"; simple order by 16--select * from sy_g…

物联网在能源管理中的应用——青创智通工业物联网解决方案

随着全球能源资源的日益紧张和环境问题的日益突出,能源管理已成为当今社会的重要议题。物联网技术的快速发展为能源管理提供了新的解决方案。本文将介绍物联网在能源管理中的应用及其优势。 一、物联网在能源管理中的应用 1. 智能电网 智能电网是物联网在能源管理中…

vue 高频面试题

vue 高频面试题 0.那你能讲一讲MVVM吗? MVVM是Model-View-ViewModel缩写,也就是把MVC中的Controller演变成ViewModel。Model层代表数据模型,View代表UI组件,ViewModel是View和Model层的桥梁,数据会绑定到viewModel层…

Android 生物识别:构建一个存储用户敏感信息的安全应用

前言 在当今数字时代,随着科技的不断发展,用户敏感信息尤为重要。从指纹到面部识别,再到虹膜扫描,生物识别技术为我们带来了便捷性和安全性。本次将构建一个简易的账户信息应用,运用生物识别技术来提高信息的安全性。…

数据结构之预习作业:排序(v1)

看视频,回答以下问题: 1.系统提到了哪些排序场景?除此之外,你还知道哪些信息系统有排序? 2.什么样的排序方法是稳定的?请举例说明 3.插入类排序分为哪几类? 4.若对n个元素进行直接插入排序&…

C++ 单词替换

输入一个字符串,以回车结束(字符串长度不超过 100 )。 该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。 现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。 输入…

使用Java实现简单的网络爬虫,并使用代理IP

目录 前言 一、了解网络爬虫的基本原理与流程 二、选择合适的技术与工具 三、编写代码实现网络爬虫 四、解析网页内容 总结 前言 网络爬虫是一种自动化程序,用于从互联网上抓取信息。它可以帮助我们快速地获取大量数据,并进行分析和处理。在实际应…

滑动窗口(一)

滑动窗口 什么是滑动窗口算法?通俗的来讲就是 “同向双指针” ,当一组数据的规律含有单调性的时候,就可以使用下面这套逻辑来优化暴力解法。 当两个指针同向移动的时候,类似于一个窗口在滑动。使用于在连续序列里找特殊的子串、…

在centos7上安装docker

1.CentOS安装Docker Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求,所以我们在CentOS 7安装Docker。 1.1.卸载(可选) 如果之前安装过旧版本的Docker,可…

C语言之递归函数

目录 函数和类型 阶乘 █递归函数调用 函数中可以调用和该函数自身完全相同的函数,这样的调用方式称为递归函数调用,下面我们就来学习相关的基础知识。 函数和类型 所谓递归(recursive),就是将自己包含在内&#x…

ubuntu添加路由

ip route show 查看当前路由表 sudo ip route add /mask via 添加一条路由 目标ip 1.1.1.1/100 下一跳 2.2.2.2 sudo ip route add 1.1.1.1/100 via 2.2.2.2 dev ens160 proto static metric 100这是一条Linux命令,用于添加一个静态路由。具体含义如下&#xff1…

AI 绘画 | Stable Diffusion 视频数字人

前言 本篇文章教会你如何利用Stable Diffusion WEB UI,使用一个人物图片转换成为一个口播视频。本篇内容的教程以WINDOWS系统为例,教你如何安装使用。 先看视频效果 彭于晏图片生成口播视频 安装 首先需要在windows电脑上安装ffmpeg,按照本教程《在 Windows PC 上轻松下载并…

DataGrip 2023.3 新功能速递!

1 数据可视化 自 DataGrip 2023.3 发布以来,已整合 Lets-Plot 库,实现数据可视化。该可视化功能可用于所有三种类型的网格: 主选项卡:在打开表、视图或 CSV 文件时,在分割模式下显示图表。结果选项卡:在 服…

centos安装opencv并在springboot中使用

使用conda安装opencv,并在docker运行的容器中使用,这里以运行则springboot应用的容器为例 步骤一:安装 在conda中安装 # 安装依赖 conda install numpy matplotlib# 安装opencv conda install -c conda-forge opencv # 或者制定版本 conda…

安装android studio

记录一下安装android studio的过程: 1.首先安装android studio到某一文件夹后,在C盘用户目录下可以看到.android文件夹。C:\Users\22515\AppData\Local\Google目录下也会出现AndroidStudio2022.2文件夹。(注意:用户名&#xff0c…

在iframe怎么把外面的dialog关掉

<template> <el-dialog ref"dialogRef"> <iframe></iframe> </el-dialog> </template> 在iframe怎么把外面的dialog关掉 在 Vue 中&#xff0c;如果要从 iframe 内部关闭外部的 dialog&#xff0c;可以通过在 iframe 中触发父…