刷爆leetcode第六期 0017

简介: 刷爆leetcode第六期 0017

编号0017


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


有效字符串需满足:


左括号必须用相同类型的右括号闭合。

左括号必须以正确的顺序闭合。

每个右括号都有一个对应的相同类型的左括号。


来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/valid-parentheses


我们假设字符串有这些符号组成


54ebb6d050394d12bcd36f2c33ee55b6.png


当我们遍历到左括号的时候 我们就对其进行压栈操作


c语言代码表示如下


typedef char StackType;
typedef struct Stack
{
  StackType* a;  //储存数据的大小
  int Top;       //栈顶
  int Capacity;  //数组容量大小 
}ST;
void StackInit(ST* p)
{
  assert(p);
  p->a = NULL;
  p->Top = 0;
  p->Capacity = 0;
}
StackType StackTop (ST* p)
{
  assert(p);
  return p->a[p->Top - 1];
}
void StackPush(ST* p, StackType x)
{
  assert(p);
  if (p->Top==p->Capacity)
  {
    int NewCapacity = p->Capacity == 0 ? 4: p->Capacity * 2;
    StackType* Tmp = realloc(p->a,NewCapacity*sizeof(StackType));
    if (Tmp==NULL)
    {
      perror("StackPush realloc");
    }
    else
    {
        p->Capacity = NewCapacity;
      p->a = Tmp;
    }
  }
  p->a[p->Top] = x;
  p->Top++;
}
void StackPop(ST* p)
{
  assert(p);
  assert(p->Top > 0);
  p->Top--;
}
void StackPrint(ST* p)
{
  assert(p);
  while (p->Top>0)
  {
    printf("%d  ", p->a[p->Top - 1]);
    StackPop(p);
  }
}
int StackSize(ST* p)
{
  assert(p);
  return p->Top;
}
bool StackEmpty(ST* p)
{
  assert(p);
  return p->Top==0;
}
void StackDestroy(ST* p)
{
  assert(p);
  free(p->a);
  p->a == NULL;
  p->Capacity = 0;
  p->Top = 0;
}
ST st1;
bool isValid(char * s)
{
    StackInit(&st1);
    while(*s)
    {
        if(*s=='('||*s=='{'||*s=='[')
        {
            StackPush(&st1,*s);
            s++;
        }
        else
        {
            StackType top = StackTop(&st1);
            StackPop(&st1);
            if((*s==')'&& top!='(')
            || (*s==']'&& top!='[')
            || (*s=='}'&& top!='{')
            )
            {
                StackDestroy(&st1);
                return false;
            }
            else
            {
                s++;
            }
        }
    }
    StackDestroy(&st1);
    return true;
}


我们提交试试看


ac1df7fe55be492ba9087ad060a14026.png


咦 我们可以发现 这里好像没有匹配成功过 直接遍历完了也返回true了


那么这里我们可以判断下是否为空 如果为空我们返回假就好了


我们再测试下看看


ac1df7fe55be492ba9087ad060a14026.png


咦 有出错了


我们发现 这里栈上还没有数据 直接就开始出栈了 当然就报错了


那么我们再打个补丁

d3815509a33945519ff9fa162b8408f6.png



咦 有出错了


我们发现 这里栈上还没有数据 直接就开始出栈了 当然就报错了


那么我们再打个补丁


            // 如果遇到了后面的括号 且栈为空 直接return false
            if(StackEmpty(&st1))
            {
                return false;
            }

之后我们再试试看

1b444cefe7a04aa69f025260dce14726.png



成功通过所有测试用例


相关文章
|
Java Spring 安全
Spring 框架邂逅 OAuth2:解锁现代应用安全认证的秘密武器,你准备好迎接变革了吗?
【8月更文挑战第31天】现代化应用的安全性至关重要,OAuth2 作为实现认证和授权的标准协议之一,被广泛采用。Spring 框架通过 Spring Security 提供了强大的 OAuth2 支持,简化了集成过程。本文将通过问答形式详细介绍如何在 Spring 应用中集成 OAuth2,包括 OAuth2 的基本概念、集成步骤及资源服务器保护方法。首先,需要在项目中添加 `spring-security-oauth2-client` 和 `spring-security-oauth2-resource-server` 依赖。
206 0
|
运维 监控 安全
云擎技术--公司要怎么进行企业组网?有什么好的解决方案?
随着企业信息化发展,高效的企业网络成为提高办公效率的关键。企业组网方式包括MPLS专线、VPN和SD-WAN。MPLS专线提供可靠和安全的连接,适合预算充足的大企业和政府单位。VPN成本低、部署快,适合小型企业远程办公,但安全性和体验有限。SD-WAN作为新型解决方案,以其灵活性、低成本、快速部署和便捷运维成为企业首选,预计到2023年将有90%的企业采用。SD-WAN能优化访问体验,支持云服务和移动办公,降低运维难度。
281 0
|
12月前
|
Rust 关系型数据库 Linux
Rainfrog: 轻量级数据库管理工具
【10月更文挑战第3天】
233 0
|
数据安全/隐私保护
PyQt5-Qt Designer控件之间的伙伴关系和Tab顺序如何设置?
PyQt5-Qt Designer控件之间的伙伴关系和Tab顺序如何设置?
297 0
PyQt5-Qt Designer控件之间的伙伴关系和Tab顺序如何设置?
|
存储 数据挖掘 Windows
服务器数据恢复—异常断电导致raid信息丢失的数据恢复案例
由于机房多次断电导致一台服务器中raid阵列信息丢失。该阵列中存放的是文档,上层安装的是Windows server操作系统,没有配置ups。 因为服务器异常断电重启后,raid阵列可以正常使用,所以未引起管理员的注意。后续出现的多次异常断电导致raid报错,服务器无法找到存储设备,进入raid管理模块进行任何操作都会导致操作系统死机。管理员尝试多次重启服务器,故障依旧。
|
存储 Java Serverless
ACK One Argo 工作流集群:玩转容器对象存储
ACK One Argo 工作流集群:玩转容器对象存储
ACK One Argo 工作流集群:玩转容器对象存储
|
弹性计算 数据挖掘 应用服务中间件
阿里云服务器通用算力型U1实例解析,实例性能、适用场景及常见问题参考
在阿里云服务器的所有实例规格中,通用算力型u1实例主打的是高性价比,通用算力型U1实例云服务器自推出以来,就受到了广大用户的关注,也是目前阿里云的活动中比较热门的云服务器实例,这个实例规格的性能要好于经济型e等共享型实例,价格又比计算型c7、通用型g7等其他企业级实例要低一些。本文将深入解析通用算力型U1实例的特点、适用场景以及价格优势,帮助用户更好地了解该云服务器实例。
阿里云服务器通用算力型U1实例解析,实例性能、适用场景及常见问题参考
|
NoSQL 关系型数据库 MySQL
【Node系列】连接数据库
在Node.js代码中使用mysql模块来连接MySQL数据库、插入、删除和更新数据
189 2
npm ERR! typeerror Error: Missing required argument #1
npm ERR! typeerror Error: Missing required argument #1
901 0