LeetCode 20.有效的括号

题目

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

C

思路分析

栈:先进后出,后进先出
当我们遇到一个左括号时,我们会期望在后续的遍历中,有一个相同类型的右括号将其闭合。由于后遇到的左括号要先闭合,因此我们可以将这个左括号放入栈顶

代码实现

bool isValid(char* s){
    //堆栈解决
    int len=strlen(s), top=0;  //栈顶的指向,开始的时候为0
    //建立一个栈
    char* stack=(char*)malloc((len+1)*sizeof(char));
    while(*s)     //遍历字符串
    {
        if(*s=='{' || *s=='[' || *s=='(')   //遇到左括号,入栈
        {
            // stack[top++] = *s;
            //将左括号转化为右括号存在其中,方便后面的判断
            if(*s == '{')
                stack[top++] = '}';
            else if(*s == '(')
                stack[top++] = ')';
            else
                stack[top++] = ']';
        }
        else       //遇到右括号,出栈
        {
            if(top==0)  //第一个元素是右括号,错误
                return false;
            char tmp=stack[--top];     //取出栈顶元素(左括号)
            if(tmp != *s){
                return false;
            }
        } 
        ++s;
    }
    if(top!=0)   //遍历结束后,栈不空,则有问题
        return false;
    else
        return true;
}

结果

在这里插入图片描述
嘿嘿嘿

感受

其实括号匹配这个问题,在当时数据结构老师讲到堆栈的时候就提过一些。但是自己从来没有想去实现过。这次当第一眼看见这个问题的时候,就想过使用栈来解决这个问题。最后能解决感觉还是蛮不错的,加深了对栈的理解和使用。

进阶版

我也不知道有没有,就暂时写着吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值