20. 有效的括号-C语言
题目来源:力扣
题目描述:
给定一个只包括
'('
,')'
,'{'
,'}'
,'['
,']'
的字符串s
,判断字符串是否有效。有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()" 输出:true示例 2:
输入:s = "()[]{}" 输出:true示例 3:
输入:s = "(]" 输出:false提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
思路:
根据s当前位置字符来判断操作,若s为左括号,入栈,若s为右括号,取栈顶元素并且出栈,然后用栈顶元素和s比较,若匹配,则说明当前括号对应,程序继续执行,否则错误
代码:
typedef int STDataType;typedef struct Stack {STDataType* a;int top;int capacity;
}ST;
void StackInit(ST* ps);//初始化
void StackDestory(ST* ps);//销毁
void StackPush(ST* ps,STDataType x);//入栈
void StackPop(ST* ps);//出栈
STDataType StackTop(ST* ps);//返回栈顶元素
void StackSize(ST* ps);//计算数据个数
bool StackEmpty(ST* ps);//判断是否为空
void StackInit(ST* ps)//初始化
{assert(ps);ps->a = (STDataType*)malloc(sizeof(STDataType) * 4);if (ps->a == NULL) {printf("malloc fail\n");exit(-1);}ps->capacity = 4;ps->top = 0;
}
void StackDestory(ST* ps)//销毁
{assert(ps);free(ps->a);ps->a = NULL;ps->top = ps->capacity = 0;
}
void StackPush(ST* ps, STDataType x)//入栈
{assert(ps);if (ps->top == ps->capacity) {//满了扩容STDataType* tmp= (STDataType*)realloc(ps->a,ps->capacity*2*sizeof(STDataType));if (tmp == NULL) {printf("realloc fail\n");exit(-1);}else {ps->a = tmp;ps->capacity *= 2;}}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];
}
void StackSize(ST* ps)//计算数据个数
{assert(ps);return ps->top;
}
bool StackEmpty(ST* ps)//判断是否为空
{assert(ps);return ps->top == 0;
}
bool isValid(char * s){ST st;char top;StackInit(&st);while(*s != '\0'){switch(*s){case '(':case '{':case '[':StackPush(&st,*s);s++;break;case ')':case '}':case ']':if(StackEmpty(&st)){StackDestory(&st);return false;}top = StackTop(&st);StackPop(&st);if((*s==')' && top != '(') ||(*s==']' && top != '[') ||(*s=='}' && top != '{')){StackDestory(&st);return false;}else{s++;}break;default:break;}}bool ret =StackEmpty(&st);StackDestory(&st);return ret;
}
注意:1.返回之前要释放内存,否则会有内存泄漏情况(这是好的习惯,与题无关)
2.如果只输入左括号,我们就无法取栈顶元素然后比较,所以结尾要加上判空,如果不为空,说明栈内还有左括号,没有匹配完成,返回false
3.如果只输入右括号,会导致程序出错,所以在取栈顶元素前要判断栈是否为空,为空则说明栈内无对应左括号,返回flase
4.使用完一次s后要记得s++
运行结果:
20. 有效的括号-C语言相关推荐
- 20小时快速入门go语言视频 - Day1
20小时快速入门go语言视频 - Day1 一.第一个 Go 程序 1.1 入口 1.2 Golang 保留的关键字 1.3 Golang预定义标识符 二.数据类型 2.1 数据类型的作用 2.2 数 ...
- 20小时快速入门go语言视频 - Day5
笔记声明 本人智商较低,好记性不如烂笔头.笔记记录了网上一套Golang免费视频教程的知识点,以供未来自己翻阅查看.不写源视频的名称和网站地址了,免得被说是广告! 20小时快速入门go语言视频 - D ...
- LeetCode19删除链表的倒数第N个节点20有效的括号
维护不易,还请点赞支持,微信搜索bigsai 回复进群一起打卡. 19删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1-> ...
- LeetCode 20. 有效的括号 golang(三)
20. 有效的括号 这个题做了三次,前两次的解法现在觉得是算不得正确的. 看的多写得少 做的多总结少 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有 ...
- 东北大学c语言及程序设计,东大20秋学期《C语言及程序设计》在线平时作业1参考...
20秋学期<C语言及程序设计>在线平时作业1( j- V: Z* f0 i+ V& k% b, S. ?/ _8 ~ 1.[单选题] 在C语言中,引用数组元素时,其数组下标的数据类 ...
- 【LeetCode】【HOT】20. 有效的括号(栈)
[LeetCode][HOT]20. 有效的括号 文章目录 [LeetCode][HOT]20. 有效的括号 package hot;import java.util.Deque; import ja ...
- Suzy找到实习了吗Day 11 |栈与队列中途 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值
Day 11 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值 20. 有效的括号 注意栈不是一个数据结构,需要自己用list实现栈的逻辑 class Solu ...
- 算法训练Day11|LeetCode 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值
题目链接:20. 有效的括号 第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false 第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字 ...
- 算法训练第十一天|力扣20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值
20. 有效的括号 题目链接:有效的括号 参考:https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B ...
最新文章
- 做个游戏:设计代码生成特定的调用堆栈
- nginx2goaccess.sh脚本内容
- 从头开始敲代码之《从BaseApplication/Activity开始(五)》(自定义控件,实现点击/滑动翻页)...
- 一文读懂数据库最新技术趋势:TDSQL带你深度纵览VLDB 2019
- IT技术人员必须思考的几个问题
- java jwt 验证_教程:用Java创建和验证JWT
- 07.敏捷项目管理——推测阶段笔记
- 【ES6】什么是Promise?解析Promise的基本用法
- 2016河北省职称计算机考试试题及答案,2016河北省职称计算机考试操作题答案.doc...
- Winform中ComcoBox控件设置选定项
- VB语言写CRC16校验
- 二次型特征值的猜根法应用
- 【Go实战基础】程序里面数据是如何显示到浏览器当中的
- 2022牛客寒假算法基础集训营1 H题 牛牛看云
- python绘制地图的第三方库,geopandas,用python画地图原来这么简单!
- String 类方法及调用案例
- spark 3.1.x支持(兼容)hive 1.2.x以及hadoop cdh版本的尝试
- chrome linux依赖包,[WebDriver]Linux/Docker下安装Chrome浏览器和ChromeDriver
- 宿州市空间数据库管理系统(1)
- 上课期间禁止使用手机