当前位置: 首页 > news >正文

【数据结构OJ题】有效的括号

原题链接:https://leetcode.cn/problems/valid-parentheses/

目录

1. 题目描述

2. 思路分析

3. 代码实现


1. 题目描述

 

2. 思路分析

这道题目主要考查了的特性:

题目的意思主要是要做到3点匹配:类型、顺序、数量

题目给的例子是比较简单的情况,可能还有如下较为复杂的情况:

循环遍历字符串s中的字符,逐个取到每个括号,如果该括号是:

1. 左括号,入栈
2. 右括号,出栈顶括号,进行匹配。

 如果不匹配,直接返回false。否则继续循环。

 循环结束后如果栈空则匹配否则左括号比右括号多肯定不匹配

3. 代码实现

typedef char STDataType;
#define INIT_CAPACITY 4
typedef struct Stack
{STDataType* a;int top;  //栈顶int capacity;  //容量
}ST;//初始化栈
void STInit(ST* ps);
//入栈
void STPush(ST* ps, STDataType x);
//出栈
void STPop(ST* ps);
//获取栈顶元素
STDataType STTop(ST* ps);
//获取栈中有效元素个数
int STSize(ST* ps);
//检测栈是否为空
bool STEmpty(ST* ps);
//销毁栈
void STDestroy(ST* ps);void STInit(ST* ps)
{assert(ps);ps->a = NULL;ps->top = 0;ps->capacity = 0;
}void STPush(ST* ps, STDataType x)
{assert(ps);if (ps->top == ps->capacity){int newCapacity = ps->capacity == 0 ? INIT_CAPACITY : ps->capacity * 2;STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType) * newCapacity);if (tmp == NULL){perror("realloc failed");exit(-1);}ps->a = tmp;ps->capacity = newCapacity;}ps->a[ps->top] = x;ps->top++;
}void STPop(ST* ps)
{assert(ps);//空assert(ps->a > 0);--ps->top;
}STDataType STTop(ST* ps)
{assert(ps);//空assert(ps->a > 0);return ps->a[ps->top - 1];
}int STSize(ST* ps)
{assert(ps);return ps->top;
}bool STEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}void STDestroy(ST* ps)
{assert(ps);ps->a = NULL;ps->top = ps->capacity = 0;
}bool isValid(char * s){ST st;STInit(&st);char topVal;while(*s){if(*s=='('||*s=='{'||*s=='['){STPush(&st,*s);}else{if(STEmpty(&st)){STDestroy(&st);return false;}topVal=STTop(&st);if(*s==')'&&topVal!='('||*s=='}'&&topVal!='{'||*s==']'&&topVal!='['){STDestroy(&st);return false;}else{STPop(&st);}}++s;}bool ret=STEmpty(&st);STDestroy(&st);return ret;
}

 

http://www.lryc.cn/news/132575.html

相关文章:

  • Java性能分析中常用命令和工具
  • JVM性能分析-jstat工具观察gc频率
  • mysql 查询报错 1267 - Illegal mix of collations
  • 【ARM】Day6
  • 深入理解Flink Mailbox线程模型
  • Docker搭建LNMP运行Wordpress平台
  • 10个常见渐变交互效果
  • [线程/C]基础
  • Spring Clould 负载均衡 - Ribbon
  • 活用DNS技术实现相同IP的不同端口映射不同域名
  • AutoHotkey:定时删除目录下指定分钟以前的文件,带UI界面
  • 一文学会sklearn中的交叉验证的方法
  • 【MySQL面试题(66道)】
  • CSSCI、北核期刊投稿指南(2023年更新)
  • 构建 NodeJS 影院微服务并使用 docker 部署它(02/4)
  • HTML <style> 标签
  • 设计模式——迪米特法则
  • 区块链基本概念与当前生态简介
  • mac安装lrzsz出错Command failed with exit 128: git
  • “深入探索JVM内部机制:揭秘Java虚拟机“
  • lvs-DR
  • Vue 项目运行 npm install 时,卡在 sill idealTree buildDeps 没有反应
  • ShardingSphere介绍
  • 【SA8295P 源码分析】44 - 如何替换 NON-HLOS.bin 中的 Wifi Firmware 固件
  • 市面上那里有稳定L2股票行情数据接口?
  • 个人信息保护影响评估(PIA)怎么做?解发条件、实施步骤、操作指南
  • HTML <sub> 标签
  • C# 设置、获取程序,产品版本号
  • LeetCode 面试题 01.04. 回文排列
  • CentOS 7 安装MySQL8.0.33