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

LeetCode | 20. 有效的括号

LeetCode | 20. 有效的括号

OJ链接
在这里插入图片描述

  • 这道题可以使用栈来解决问题~~

思路:

  • 首先我们要使用我们之前写的栈的实现来解决此问题~~
  • 如果左括号,就入栈
  • 如果右括号,出栈顶的左括号跟右括号判断是否匹配
    • 如果匹配,继续
    • 如果不匹配,终止

代码如下:

typedef int STDataType;typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;// 初始化栈
void StackInit(ST* ps)
{assert(ps);ps->a = NULL;ps->capacity = 0;//top 表示指向栈顶元素//ps->top = -1;//top 表示指向栈顶元素的下一个ps->top = 0;
}
// 入栈
void StackPush(ST* ps, STDataType x)
{assert(ps);if (ps->capacity == ps->top){STDataType newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType) * newcapacity);if (tmp == NULL){perror("relloc fail!\n");exit(-1);}ps->a = tmp;ps->capacity = newcapacity;}ps->a[ps->top] = x;ps->top++;
}
// 出栈
void StackPop(ST* ps)
{assert(ps);assert(ps->top > 0);ps->top--;
}
// 获取栈顶元素
STDataType StackTop(ST* ps)
{assert(ps);assert(ps->top > 0);return ps->a[ps->top - 1];
}
// 获取栈中有效元素个数
int StackSize(ST* ps)
{assert(ps);return ps->top;
}
// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0
bool StackEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}
// 销毁栈
void StackDestroy(ST* ps)
{assert(ps);ps->a = NULL;ps->capacity = ps->top = 0;
}bool isValid(char* s) {ST st;StackInit(&st);while(*s){switch(*s){case ')':case ']':case '}':{if(StackEmpty(&st)){StackDestroy(&st);return false;}char top = StackTop(&st);StackPop(&st);if((*s == ')' && top != '(')|| (*s == ']' && top != '[')|| (*s == '}' && top != '{')){StackDestroy(&st);return false;}else{++s;}break;}case '(':case '[':case '{':{StackPush(&st,*s);++s;break;}default:break;}}bool ret = StackEmpty(&st);StackDestroy(&st);return ret;
}
http://www.lryc.cn/news/229206.html

相关文章:

  • 英语语法 - 祈使句 | 虚拟语气
  • 记录pytorch实现自定义算子并转onnx文件输出
  • ARPG----C++学习记录04 Section8 角色类,移动
  • 拆解软件定义汽车:OS突围
  • 并发线程使用介绍(二)
  • 【Proteus仿真】【51单片机】多路温度控制系统
  • 一些可以参考的文档集合15
  • k8s的service自动发现服务:实战版
  • 项目笔记记录
  • 【leetcode】1137. 第 N 个泰波那契数
  • 【解决】conda-script.py: error: argument COMMAND: invalid choice: ‘activate‘
  • Linux 性能调优之硬件资源监控
  • Windows系统隐藏窗口启动控制台程序
  • FreeSWITCH fail2ban.lua
  • Qt HTTP下载数据
  • 8. 深度学习——NLP
  • 部署 KVM 虚拟化平台
  • Juniper PPPOE双线路冗余RPM配置
  • 原生JS实现视频截图
  • 前端Rust二进制/wasm全平台构建流程简述
  • 加解密算法相关技术详解
  • Clickhouse学习笔记(13)—— Materialize MySQL引擎
  • 《QT从基础到进阶·二十四》按钮组QButtonGroup,单选框QRadioButton和多选框QCheckBox
  • Ansible--playbook剧本
  • MacOS下VMware Fusion配置静态IP
  • 三、机器学习基础知识:Python常用机器学习库(中文文本分析相关库)
  • Nginx 使用笔记大全(唯一入口)
  • 数据结构-二叉排序树(建立、查找、修改)
  • Linux 性能优化之使用 Tuned 配置优化方案
  • Day02_《MySQL索引与性能优化》