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

每日一道算法题(Leetcode 20)

 What's past is prologue.  凡是过去,皆为序章。

题目 

分析 

1. 我们可以用栈的结构来解决这道题。

2. 我们使用while循环,每次读取字符串中一个元素进行操作,直到最后读取到 '\0'为止。

3. 如果遇见 '(', '[' ,'{' 这三种左括号,则把该左括号入栈;如果遇见 ')', ']' ,'}' 这三种右括号,则出栈一个栈中的元素。

4. 如果出栈的元素与右括号不匹配,则返回 false;如果匹配,则继续进行下一步。比如:这种情况 " ()[} "。

5. 读取到右括号时,先判断栈中是否还有元素,如果没有元素出来匹配,则说明右括号存在不能匹配情况,则直接返回 false。比如:这种情况 '' ()) "。

6. 对子字符串的遍历结束之后,需要再去判断栈中是否还有元素,如果有说明左括号存在不能匹配情况,则直接返回 false。比如:这种情况 '' (() "。

 代码实现

bool isValid(char* s) 
{typedef struct Stack {char* arr;int capacity;int top;} Stack;void InitStack(Stack * ps) {assert(ps);ps->arr = NULL;ps->capacity = ps->top = 0;}void PushStack(Stack* ps,char x){assert(ps);if(ps->capacity == ps->top){int newcapacity=ps->capacity==0?4:2*ps->capacity;char* tmp=(char*)realloc(ps->arr,sizeof(char)*newcapacity);if(tmp==NULL){perror("realloc fail");exit(1);}ps->arr=tmp;ps->capacity=newcapacity;}      ps->arr[ps->top++]=x;}void PopStack(Stack * ps){assert(ps);assert(ps->top!=0);ps->top--;}char TopStack(Stack * ps){assert(ps);assert(ps->top!=0);return ps->arr[ps->top-1];}void DestroyStack(Stack * ps){assert(ps);if (ps->arr){free(ps->arr);//释放动态数组空间}ps->arr = NULL;ps->capacity = ps->top = 0;}Stack stack;InitStack(&stack);while(*s!='\0'){if(*s=='('||*s=='['||*s=='{'){PushStack(&stack,*s);}else{if(stack.top==0){DestroyStack(&stack);return false;}char ch=TopStack(&stack);if((ch=='('&&*s==')')||(ch=='['&&*s==']')||(ch=='{'&&*s=='}')){PopStack(&stack);}else{DestroyStack(&stack);return false;}}s++;}if(stack.top!=0){DestroyStack(&stack);return false;}DestroyStack(&stack);return true;
}

致谢

  感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!  


http://www.mrgr.cn/news/55478.html

相关文章:

  • 智慧公厕厂家:智慧公厕建设推动城市公厕智能化变革
  • C++简介和基本语法介绍
  • Python基础之输入与输出
  • JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
  • 机器学习面试常问题目
  • C语言作业day8
  • java如何部署web后端服务
  • InnoDB引擎(架构,事务原理,MVCC详细解读)
  • Python多进程学习与使用:全面指南
  • 杨笠代言风波:京东股价逆流而上?
  • wordcloud分词生成
  • 31.第二阶段x86游戏实战2-遍历技能2(技能二叉树基址)
  • 第 6 章 Kafka-Eagle 监控 和 Kafka-Kraft 模式
  • 电能表预付费系统-标准传输规范(STS)(16)
  • 2025 年IT技术人员关键技能,零基础入门到精通,收藏这篇就够了
  • C++ : STL容器之list剖析
  • 业务开发常见问题-并发工具类
  • Bootstrap Blazor框架添加全局页面水印
  • OpenIPC开源IPC之Ardupilot配置
  • linux_c IPC消息队列练习
  • [云] Deploying Your First Serverless Application
  • 每日OJ题_牛客_数组变换_贪心+位运算_C++_Java
  • Python+Selenium+Pytest+POM自动化测试框架封装
  • Redis优劣势分析
  • 智慧公厕厂家:智慧公厕建设推动城市公厕智能化变革
  • 【Java】正则表达式详解