
LeetCode-20:有效的括号
发布日期:2021-05-04 18:35:59
浏览次数:35
分类:精选文章
本文共 1576 字,大约阅读时间需要 5 分钟。
题目描述
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
示例1:
输入:s = “{[]}”
输出:true
示例2:
输入:s = “([)]”
输出:false
题解
本题的思想其实很简单,用栈来实现,从头开始遍历字符串,如果遇到 ‘(’ 、’{’、’[’,则入栈,一旦遇到 ‘)’、’}’、’]’,则出栈做匹配,如果能够匹配上,则继续向后走,直到字符串走完为止,再返回true,如果匹配不上,则直接返回false。
题解代码
typedef struct node{ char* a; int top; int capacity;}Stack;void StackInit(Stack* p){ assert(p); p->a = (char*)malloc(sizeof(char)*4); p->top = 0; p->capacity = 4;}//入栈void push(Stack* p,char data){ assert(p); // 若空间满了,则扩容 if(p->top == p->capacity) { char* tmp = (char*)realloc(p->a,sizeof(char)*p->capacity*2); p->capacity *= 2; p->a = tmp; } p->a[p->top] = data; p->top++;}//弹出栈char pop(Stack* p){ assert(p); if(p->top == 0) { exit(-1); } int t = p->a[p->top-1]; p->top--; return t;}bool isValid(char * s){ Stack p; StackInit(&p); while(*s) { if(*s == '(' || *s == '[' || *s == '{') { push(&p,*s); s++; } else { if(p.top == 0) { return false; } char tmp = pop(&p); // printf("%c",tmp); if((*s == ')' && tmp == '(') || (*s == ']' && tmp == '[') || (*s == '}' && tmp == '{')) { s++; } else{ return false; } } } //若为NULL,则说明匹配完成 if(p.top == 0) { return true; } else { return false; }}
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月07日 07时51分55秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
keil左侧文件调整方法
2021-05-08
STM8 GPIO模式
2021-05-08
STM32boot启动
2021-05-08
omnet++
2021-05-08
23种设计模式一:单例模式
2021-05-08
Qt中的析构函数
2021-05-08
二叉堆的c++模板类实现
2021-05-08
C语言实现dijkstra(adjacence matrix)
2021-05-08
C语言学习从初级到精通的疯狂实战教程-徐新帅-专题视频课程
2021-05-08
三层框架+sql server数据库 实战教学-徐新帅-专题视频课程
2021-05-08
NAT工作原理
2021-05-08
Processes, threads and goroutines
2021-05-08
c++中的10种常见继承
2021-05-08
Vue学习—深入剖析渲染函数
2021-05-08
Vue学习—深入剖析函数式组件
2021-05-08
简单Makefile的编写
2021-05-08
使用BAT批处理 匹配查找指定文件夹,并在当文件夹下创建空文件
2021-05-08
wxpython的Hello,World代码探索
2021-05-08
【数字图像处理】OpenCV3 学习笔记
2021-05-08
【单片机开发】智能小车工程(经验总结)
2021-05-08