“寻寻觅觅冷冷清清凄凄惨惨戚戚”
“三杯两盏淡酒,怎敌他晚来风急”

这道题是括号匹配问题,典型对 栈的应用的题目。

如何创建一个顺序栈在前面的博文已经实现:传送门。

题目描述

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

题目链接

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相关推荐

  1. Java题目详解——LeetCode20.有效的括号

    目录 题目链接:LeetCode20.有效的括号 一.题目要求 二.解题思路 三.具体代码 四.运行截图 题目链接:LeetCode20.有效的括号 一.题目要求 给定一个只包括 '(',')','{ ...

  2. 代码随想录第11天 | LeetCode20. 有效的括号、LeetCode1047. 删除字符串中的所有相邻重复项、LeetCode150. 逆波兰表达式求值

    day11 | LeetCode20. 有效的括号.LeetCode1047. 删除字符串中的所有相邻重复项.LeetCode150. 逆波兰表达式求值 文章目录 day11 | LeetCode20 ...

  3. leetcode-20 有效的括号匹配

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...

  4. Leetcode--20. 有效的括号

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...

  5. LeetCode--20. 有效的括号(栈,删除法)

    有效的括号(C, Python) 1. 题目描述 2. 题目分析 3. C语言实现 4. Python语言实现 1. 题目描述 难度:简单 2. 题目分析 这道题咋一看挺简单的,但是请注意观察这两个示 ...

  6. LeetCode20.有效的括号 JavaScript

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字符串可被认 ...

  7. LeetCode-20.有效的括号(栈的使用+map的count)

    题目内容 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/valid-parentheses/ 给定一个只包括 '(',')','{','}', ...

  8. leetcode20. 有效的括号

    一:题目 二:上码 class Solution {public:bool isValid(string s) {stack<char> q;for(int i = 0;i < s. ...

  9. 力扣---LeetCode20. 有效的括号(栈)

    文章目录 前言

最新文章

  1. mfc窗口添加背景图片
  2. 转用PHP开发企业Wifi网络Web认证系统(附源码)
  3. CSS基本选择器、层次选择器、结构伪类选择器、属性选择器
  4. 实验6 控制结构综合程序设计 7-3 简单计算器
  5. 大端 小端 原码 反码 补码 及内存中的表现
  6. Spark学习笔记——在集群上运行Spark
  7. python基础公式_一、Python基础(数据类型、基本函数、基本运算)
  8. 互联网晚报 | 9月7日 星期二 | 徐雷升任京东集团总裁;顺丰宣布再投5亿扶持快递小哥;vivo自研芯片V1正式亮相...
  9. idhttpserver是按线程接受请求的吗_1000个并发线程,10台机器,每台机器4核,设计线程池大小...
  10. android命令打包,android 命令打包
  11. chrome调试技巧
  12. crossentropy java_示例CrossEntropyLoss用于pytorch中的3D语义分段
  13. Linux直接复制eclipse也可以使用
  14. Soulver 3 for Mac(Mac计算器软件)
  15. 解压版mysql使用
  16. Windows 11 LTSC 数字激活方法/HEU KMS Activator 数字激活/LTSC公key激活
  17. c语言函数输出怎么让竖的变横的,c语言里面。为什么我的屏幕输出数字都是竖着输出。而不是横着。怎么才能变成横着。我想输出矩阵格式的。...
  18. 论文图片绘制 Python绘制多分类混淆矩阵及可视化(颜色随正确率渐变)
  19. spring 的 applicationcontext.xml
  20. Trove系列(二)—Trove 的架构和流程介绍

热门文章

  1. Mac壁纸软件哪款好用?Wallpaper Wizard可以一试
  2. 计算机连接投影仪后黑屏咋调试,电脑连接投影机播放电影过程中经常性黑屏一秒故障解决一例-投影仪怎么连接电脑...
  3. 一周热图|“惊鸿仙子”俞飞鸿代言日本高端美容仪品牌雅萌;“姐圈顶流”刘敏涛携手良品铺子总裁直播带货...
  4. cache在计算机中代表什么,cache是什么意思,计算机中cache是什么意思
  5. Java爬虫抓取网页数据(抓取慕课网论坛为实例)
  6. 【入门】小明的幸运数
  7. 【MongoDB】安全认证
  8. python代码表达元旦节_2020元旦的python学习
  9. rust石头壁炉_《腐蚀》RUST生存攻略心得
  10. 《Cluster Contrast for Unsupervised Person Re-Identification》论文阅读