栈和队列的OJ题--12.括号匹配

 12.括号匹配

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


 

解题思路:
     该题比较简单,是对栈特性很好的应用,具体操作如下:
     循环遍历String中的字符,逐个取到每个括号,如果该括号是:
        1. 左括号,直接入栈
        2. 右括号,与栈顶的左括号进行匹配,如果不匹配直接返回false
           否则继续循环
     循环结束后,如果栈空则匹配,否则左括号比右括号多肯定不匹配
bool isValid(char * s){
    // oj题目给的提示:1 <= s.length <= 104  说明s中一定是有字符串的  不考虑空串或者s为空的情况
    int size = strlen(s);
    Stack st;
    StackInit(&st);
    bool isMatch = true;
    for(int i = 0; i < size; ++i)
    {
        // 如果是左括号则入栈
        if(('(' == s[i]) || ('[' == s[i]) || ('{' == s[i]))
        {
            StackPush(&st, s[i]);
        }
        else
        {
            // 拿到的是右括号
            // 此时: 需要从栈顶获取左括号来检测是否匹配
            // 注意:一定要保证栈中有元素才可以获取栈顶元素
            if(StackEmpty(&st))
            {
                //StackDestroy(&st);
                //return false;
                isMatch = false;
                break;
            }


            char top = StackTop(&st);
            if((top == '(' && s[i] == ')') ||
               (top == '[' && s[i] == ']') ||
               (top == '{' && s[i] == '}'))
            {
                StackPop(&st);
            }
            else
            {
                // 没有匹配
                // StackDestroy(&st);
                // return false;
                isMatch = false;
                break;
            }
        }
    }


    // 如果完全匹配,则循环结束时,栈一定是空的
    // 否则说明:左括号比右括号多
    if(!StackEmpty(&st))
    {
        //StackDestroy(&st);
        //return false;
        isMatch = false;
    }


    StackDestroy(&st);
    return isMatch;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值