首页 > 其他分享 >20.有效的括号-力扣(LeetCode)

20.有效的括号-力扣(LeetCode)

时间:2024-11-21 21:46:58浏览次数:3  
标签:count 20 sta top return 力扣 括号 false LeetCode

题目:

解题思路:

        首先要明确一个问题:配对的左右括号不一定是相邻的,例如: ( [ ] ) 。

        由上述,'(','[','{' 可能不会在遍历整个字符串的过程中,立即找到配对的括号。括号的配对原则是:当遍历到右括号时去看后出现的左括号是否与之配对,那么很容易想到满足后进先出的特点的结构为栈。

        首先定义一个栈的结构体,为栈和栈的存储空间(根据题目中的提示,存储空间定义足够大)以malloc申请空间并进行初始化。遍历整个字符串,当遇到左括号时,进行入栈操作,当遇到右括号时,进行出栈操作(主要出栈前进行判空操作,防止非法访问空间地址)。遍历完成后,栈中如果还有剩余元素,证明左括号多于右括号,返回false。

        不满足有效括号规则的情况:

        1、当传入字符串长度为奇数时,一定不满足有效括号的规则,返回false。

        2、当遍历到右括号,发现栈为空,已经没有左括号与之配对,返回false。

        3、当遍历到右括号,发现栈顶元素不能与之配对,返回false。

        4、遍历完整个字符串以后,栈中如果还有剩余元素,证明左括号多于右括号,返回false。

代码:

typedef struct
{
    char *data;//栈的存储空间
    int count;//栈中元素数量
    int top;//栈顶
}stack;
bool isValid(char *s)
{
    if(strlen(s) == 0)
        return true;
    if(strlen(s) % 2 == 1)
        return false;
    stack *sta = (stack *)malloc(sizeof(stack));//创建栈
    sta->count = 0;
    sta->top = -1;
    sta->data = (char *)malloc(sizeof(char) * 10000);//初始化栈
    while(*s)
    {
        if(*s == '(' || *s == '[' || *s == '{')
        {
            sta->data[sta->top+1] = *s;//入栈
            sta->top++;
            sta->count++;
        }
        if(*s == ')')
        {
            if(sta->top == -1) 
                return false;//判空
            if(sta->data[sta->top] == '(')
            {
                sta->top--;//出栈
                sta->count--;
            }
            else
                return false;
        }
        if(*s == ']')
        {
            if(sta->top == -1) 
                return false;//判空
            if(sta->data[sta->top] == '[')
            {
                sta->top--;//出栈
                sta->count--;
            }
            else
                return false;
        }
        if(*s == '}')
        {
            if(sta->top == -1) 
                return false;//判空
            if(sta->data[sta->top] == '{')
            {
                sta->top--;//出栈
                sta->count--;
            }
            else
                return false;
        }
        s++;
    }
    if(sta->count != 0)
        return false;
    else
        return true;
}

标签:count,20,sta,top,return,力扣,括号,false,LeetCode
From: https://blog.csdn.net/a921876874/article/details/143844124

相关文章

  • [COCI2015-2016#6] PAROVI | 互质覆盖 题解
    前言不能在同一个坑上栽第三次!题目链接:原题;加强版。题意简述\(1\simn\)数轴,你可以使用若干条线段\([l,r]\)来覆盖,其中要满足\(\gcd(l,r)=1\)。问你能够完全覆盖数轴的方案数,对\(M\)取模。\(2\leqn\leq10^4\),\(2\leqM\leq10^9+7\)。不保证\(M\)为质数。......
  • PTA-团体程序设计天梯赛 L1-023 输出GPLT(20分)
    L1-023输出GPLT分数20题目描述:给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字......
  • 『模拟赛』多校A层冲刺NOIP2024模拟赛25
    Rank极限了,感觉还行感觉T3不是一般人可做的,遂先来写赛记。A.图签。本来不是很一眼的,但看到给了这个和这个然后就很一眼了。用longlong状压每个点所有操作下是否属于S/T集合的状态,那么发现对于一条边\((i,j)\),只有某一次操作满足\(i\inS\)且\(j\inT\)......
  • 2024.11.21模拟赛
    今天照常七点半左右到学校,结果入门发现氛围不对。打开手机,发现题目压缩包已经发了,我当时就是一个问号。(一定是刚开始耽误的几分钟耽误我写T2了!!!)然后就开始写题。这套题的难度对于我还好,不会出现打完暴力只能摆烂的情况。(但出现了先摆烂然后疯狂打暴力的情况)T1第一眼看着花......
  • 【题解】AT_joisc2007_mall ショッピングモール (Mall)
    原题传送门温馨提示:岛国题要换行!需要求一个矩阵的和,考虑二维前缀和。题目中不允许矩阵中有负数,结合求和的最小值,我们把负数赋为最大值不就行了吗。接下来就是求二维前缀和了。基于容斥原理,二维前缀和有如下递推关系:\[sum_{i,j}=sum_{i-1,j}+sum_{i,j-1}-sum_{i-1,j-1}+c_{i......
  • [2024-11-21极客大挑战CTFPlus]Crypto练手
    三叶草安全技术小组第十五届极客大挑战CTFPlushttps://geek-syclover.play.ctfplus.cn/crypto的21题做出来11个,反正就是仍需努力今天官方wp出来,先发一下自己做的Crypto凯撒加密YEI{CKRIUSK_ZU_2024_MKKQ_INGRRKTMK}凯撒加密,flag前缀为SYC{xx}Y到S是一个偏移......
  • 2024/11/20日 日志 关于 Filter & Listener
    Filter点击查看代码--Filter----·概念:Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一--·过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。--·过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感字符处理等等----......
  • gscoolink:gsv2001的sdk移植
    1前言  以gsv的sdk的应用代码为例,将应用代码从m0核移植到m1核的mcu上;  因为用的是hal库,所以互相移植修改的并不多;实际改个头文件就可以编译了;  虽然我hal库用的是m1核的hal库,但是实际上我直接啥也没改,跑在m4核的gdf303上也没啥问题;2修改项目名  修改.uprojx的名字,......
  • 2024最新版Node.js详细安装教程(含npm配置淘宝最新镜像地址)
    一:Node.js安装浏览器中搜索Nodejs,或直接用网址:Node.js—在任何地方运行JavaScript建议此处下载长期支持版本(红框内):开始下载,完成后打开文件:进入安装界面,在此处勾选,再点击next:此处为你希望将Nodejs安装到哪里,可以是默认的,也可以自定义,前提是要明确安装到哪里。这里不......
  • [2024.11.21]IOI 赛制练习赛
    我爱IOI赛时虽然小L说题目按照字典序排列,但是我还是决定先看T1。由于是图论专场,所以我直接大胆对数据连边,然后胡了一个并查集,感觉很对。但发现不太好维护当前状态如何插入新值,简单画了一会发现只需要维护一个\(vis\)数组并放到祖先那里,就可以维护能否操作了。单身时间......