LeetCode20.有效的括号——纯C
“寻寻觅觅冷冷清清凄凄惨惨戚戚”
“三杯两盏淡酒,怎敌他晚来风急”
这道题是括号匹配问题,典型对 栈的应用的题目。
如何创建一个顺序栈
在前面的博文已经实现:传送门。
题目描述
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
题目链接
LeetCode20. 有效的括号.简单
题目分析
括号匹配问题,典型的对数据结构 栈的应用。
以我现在初学数据结构的水平,LeetCode虽然表明它是个简单题,但对我来说并不简单,知识储备量不够多,用纯C解决的话,很繁琐。
我的思路是先需要创建一个顺序结构的栈,然后用栈的基本功能如:压栈(StackPush),出栈(StackPop),得到栈顶的元素(StackTop)等功能 来完成这道题。
思路:
1.遍历整个字符串“ ‘(’,’)’,’{’,’}’,’[’,’]’ ”。
2.在遍历的过程中如果遇到左括号’(’,或者’{’,或者’[’。进行压栈操作(StackPush)。
3.如果遇到右括号’)’,或者’}’,或者’]’,则进行访问栈顶元素的值的操作(StackTop),如果栈顶的左括号和其中之一的右括号匹配,则进行出栈操作(StackPop)。
4.直到字符串越界循环结束。
代码实现
注意:在实现的过程中,需要注意极端情况。
普通情况正常人都能想到。而极端情况就不一定了。
而且题目的实例中可没有给哦。
1.假如只有一个左括号‘(’
呢?
//提示:只有一个左括号时,栈就不为空了。
2.假如只有一个右括号‘)’
呢?
//提示:只有一个右括号时栈为空。
/***********
*结构体创建
***********/
typedef char STDataType;typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;
/***********
*函数的声明
***********///初始化结构体
void StackInit(ST* ps);
//销毁结构体
void StackDestroy(ST* ps);
//压栈
void StackPush(ST* ps, STDataType x);
//出栈
void StackPop(ST* ps);
//得到栈顶的值
STDataType StackTop(ST* ps);
//判断栈是否为空
bool StackEmpty(ST* ps);
//得到栈的长度
int StackSize(ST* ps);/***********
*函数的定义
***********///初始化结构体
void StackInit(ST* ps)
{assert(ps);ps->a = NULL;ps->capacity = 0;ps->top = 0;
}
//销毁结构体
void StackDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = 0;ps->top = 0;}
//压栈
void StackPush(ST* ps, STDataType x)
{assert(ps);if (ps->top == ps->capacity){int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;STDataType* new = (STDataType*)realloc(ps->a, sizeof(STDataType) * newcapacity);if (new == NULL){printf("realloc fail\n");exit(-1);}ps->a = new;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];
}
//判断栈是否为空
bool StackEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}
//得到栈的长度
int StackSize(ST* ps)
{assert(ps);return ps->top;
}/***********
*题目函数接口
***********/
bool isValid(char* s)
{ST st;//创建栈,否则后续压栈等操作无法实现StackInit(&st);while (*s){if (*s == '(' || *s == '{' || *s == '['){StackPush(&st, *s);s++;}else{//只有一个右括号时,栈为空。直接return falseif (StackEmpty(&st)){return false;}char top = StackTop(&st);if (*s == ')' && top == '(' || *s == '}' && top == '{' || *s == ']' && top == '['){StackPop(&st);s++;}else{return false;}}}//处理只有一个左括号if (!StackEmpty(&st)){return false;}return true;//销毁栈,拒绝内存泄漏StackDestroy(&st);
}
LeetCode20.有效的括号——纯C相关推荐
- Java题目详解——LeetCode20.有效的括号
目录 题目链接:LeetCode20.有效的括号 一.题目要求 二.解题思路 三.具体代码 四.运行截图 题目链接:LeetCode20.有效的括号 一.题目要求 给定一个只包括 '(',')','{ ...
- 代码随想录第11天 | LeetCode20. 有效的括号、LeetCode1047. 删除字符串中的所有相邻重复项、LeetCode150. 逆波兰表达式求值
day11 | LeetCode20. 有效的括号.LeetCode1047. 删除字符串中的所有相邻重复项.LeetCode150. 逆波兰表达式求值 文章目录 day11 | LeetCode20 ...
- leetcode-20 有效的括号匹配
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...
- Leetcode--20. 有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...
- LeetCode--20. 有效的括号(栈,删除法)
有效的括号(C, Python) 1. 题目描述 2. 题目分析 3. C语言实现 4. Python语言实现 1. 题目描述 难度:简单 2. 题目分析 这道题咋一看挺简单的,但是请注意观察这两个示 ...
- LeetCode20.有效的括号 JavaScript
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...
- LeetCode-20.有效的括号(栈的使用+map的count)
题目内容 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/valid-parentheses/ 给定一个只包括 '(',')','{','}', ...
- leetcode20. 有效的括号
一:题目 二:上码 class Solution {public:bool isValid(string s) {stack<char> q;for(int i = 0;i < s. ...
- 力扣---LeetCode20. 有效的括号(栈)
文章目录 前言
最新文章
- mfc窗口添加背景图片
- 转用PHP开发企业Wifi网络Web认证系统(附源码)
- CSS基本选择器、层次选择器、结构伪类选择器、属性选择器
- 实验6 控制结构综合程序设计 7-3 简单计算器
- 大端 小端 原码 反码 补码 及内存中的表现
- Spark学习笔记——在集群上运行Spark
- python基础公式_一、Python基础(数据类型、基本函数、基本运算)
- 互联网晚报 | 9月7日 星期二 | 徐雷升任京东集团总裁;顺丰宣布再投5亿扶持快递小哥;vivo自研芯片V1正式亮相...
- idhttpserver是按线程接受请求的吗_1000个并发线程,10台机器,每台机器4核,设计线程池大小...
- android命令打包,android 命令打包
- chrome调试技巧
- crossentropy java_示例CrossEntropyLoss用于pytorch中的3D语义分段
- Linux直接复制eclipse也可以使用
- Soulver 3 for Mac(Mac计算器软件)
- 解压版mysql使用
- Windows 11 LTSC 数字激活方法/HEU KMS Activator 数字激活/LTSC公key激活
- c语言函数输出怎么让竖的变横的,c语言里面。为什么我的屏幕输出数字都是竖着输出。而不是横着。怎么才能变成横着。我想输出矩阵格式的。...
- 论文图片绘制 Python绘制多分类混淆矩阵及可视化(颜色随正确率渐变)
- spring 的 applicationcontext.xml
- Trove系列(二)—Trove 的架构和流程介绍
热门文章
- Mac壁纸软件哪款好用?Wallpaper Wizard可以一试
- 计算机连接投影仪后黑屏咋调试,电脑连接投影机播放电影过程中经常性黑屏一秒故障解决一例-投影仪怎么连接电脑...
- 一周热图|“惊鸿仙子”俞飞鸿代言日本高端美容仪品牌雅萌;“姐圈顶流”刘敏涛携手良品铺子总裁直播带货...
- cache在计算机中代表什么,cache是什么意思,计算机中cache是什么意思
- Java爬虫抓取网页数据(抓取慕课网论坛为实例)
- 【入门】小明的幸运数
- 【MongoDB】安全认证
- python代码表达元旦节_2020元旦的python学习
- rust石头壁炉_《腐蚀》RUST生存攻略心得
- 《Cluster Contrast for Unsupervised Person Re-Identification》论文阅读