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

【LeetCode刷题指南】--有效的括号

🔥个人主页:@草莓熊Lotso

🎬作者简介:C++研发方向学习者

📖个人专栏: 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》

⭐️人生格言:生活是默默的坚持,毅力是永久的享受。  

前言:随着编程相关知识点的学习,我们LeetCode的刷题也不能落下。在前面我们也接触到了洛谷和牛客这两个刷题网站,但是博主一直都在推荐大家使用力扣,是因为力扣的判题严谨且大部分都是接口型题目,与面试中的笔试题也更加贴合。那么还是老样子,博主会为大家提供我自己的思路和代码,但是算法题的解法肯定不止一个,欢迎大家一起交流和讨论。


目录

有效的括号

解题过程:

代码演示: 


有效的括号

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

题目描述:

题目示例: 

 思路:借助数据结构-栈,遍历字符串,左括号入栈,右括号取栈顶元素进行比较,看是否匹配

解题过程:

1.遍历字符串,左括号就入栈,右括号就取栈顶元素

2.前提是不为空才能取,如果为空证明前面没有左括号直接销毁返回false

3.如果不为空,取栈顶元素进行匹配,出现匹配不成功的销毁后返回false

4.如果本次匹配成功,出栈,继续遍历

5.遍历完后进行判空,如果栈为空证明全部匹配上了,返回true,如果不为空则返回false

复杂度:

  • 时间复杂度: O(n)
  • 空间复杂度: O(∗)

代码演示: 

typedef char STDataType;
typedef struct Stack
{STDataType* arr;int top;int capacity;
}ST;//初始化
void STInit(ST* ps)
{ps->arr = NULL;ps->top = ps->capacity = 0;
}//销毁
void STDestory(ST* ps)
{if (ps->arr)free(ps->arr);ps->top = 0;ps->capacity = 0;
}//入栈
void STPush(ST* ps, STDataType x)
{assert(ps);//检查空间//空间不够就增容if (ps->top == ps->capacity){int newcapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;STDataType* tmp = (STDataType*)realloc(ps->arr, newcapacity * sizeof(STDataType));if (tmp == NULL){perror("realloc fail!");exit(1);}ps->arr = tmp;ps->capacity = newcapacity;}//空间足够ps->arr[ps->top++] = x;
}//出栈
void STPop(ST*ps)
{//ps->top--;
}//取栈顶元素
STDataType STTop(ST* ps)
{return 	ps->arr[ps->top - 1];;
}//判空
bool STEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}//求栈中有效数据个数
int STSize(ST* ps)
{assert(ps);return ps->top;
}//----------------------以上是栈结构常用接口--------------------------------
bool isValid(char* s) {ST st;STInit(&st);char*pi=s;while(*pi!='\0'){if(*pi=='('||*pi=='['||*pi=='{'){STPush(&st,*pi);}else{//右括号取栈顶元素进行匹配//栈不为空才能取if(STEmpty(&st)){STDestory(&st);return false;}char top=STTop(&st);if((top=='('&&*pi!=')')||(top=='['&&*pi!=']')||(top=='{'&&*pi!='}')){STDestory(&st);return false;}//本次匹配就出栈STPop(&st);}pi++;}//为空有效,非空无效bool ret=STEmpty(&st)?true:false;STDestory(&st);return ret;
}

这里用到了栈的结构,大家如果使用C语言写的话可以把我们之前自己实现的栈直接拷贝上去   


 往期回顾:

【数据结构初阶】--双向链表(一)

​​​​​​【数据结构初阶】--双向链表(二)

【LeetCode刷题指南】--随机链表的复制

结语:本篇文章就到此结束了,《LetetCode刷题指南》中的题目比起之间的C语言刷题集中的题目,肯定会更加复杂一些。而且题目形式也不一样,大家需要注意一下。如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持

    http://www.xdnf.cn/news/16224.html

    相关文章:

  • Springboot项目实现将文件上传到阿里云
  • 【PyTorch】图像多分类项目
  • Yolo底层原理学习(V1~V3)(第一篇)
  • 2507C++,窗口勾挂事件
  • 我从农村来到了大城市
  • 绘图库 Matplotlib Search
  • C语言案例《猜拳游戏》
  • 【C++进阶】第7课—红黑树
  • ZYNQ芯片,SPI驱动开发自学全解析个人笔记【FPGA】【赛灵思】
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(10):ような复习
  • JAVA_FourTEEN_常见算法
  • 2025年7月区块链与稳定币最新发展动态深度解析
  • 基于讯飞星火AI的文学作品赏析系统开发实战:从通用聊天到专业文学分析的完整技术方案
  • Netty中future和promise用法和区别
  • 07 51单片机之定时器
  • 魔百和M401H_国科GK6323V100C_安卓9_不分地区免拆卡刷固件包
  • [RPA] Excel中的字典处理
  • 【C#学习Day12笔记】抽象类、密封类与子类构造(继承)
  • C语言————原码 补码 反码 (超绝详细解释)
  • 服务器安装虚拟机全步骤
  • KNN算法:从原理到实战全解析
  • selenium 元素定位
  • OpenCV(04)梯度处理,边缘检测,绘制轮廓,凸包特征检测,轮廓特征查找
  • 医疗器械:DFEMA和PFEMA
  • 零基础也能创作专属歌曲:文心一言+蘑兔AI协同教程
  • 前端学习日记(十三)
  • 在 Ansys CFX Pre 中配置 RGP 表的分步指南
  • ERNIE-4.5-0.3B 实战指南:文心一言 4.5 开源模型的轻量化部署与效能跃升
  • cocos creator 3.8.6 websocke的一直报错WebSocket is not a constructor
  • 武汉烽火民生汇,盛大启航