leetcode算法练习——有效的括号

题目:

在这里插入图片描述
示例:

输入: "()"
输出: true
输入: "()[]{}"
输出: true
输入: "{[]}"
输出: true
输入: ")}"
输出: false

分析:

如果字符串中的括号都是有效的,依次删掉所有成对的 “()“或”{}“或”[]” 后,字符串最终会变为空串。

遍历字符串,如果字符为左半边括号,入栈,如果为右半边括号,并且与栈顶元素是一对,弹出栈顶元素。
遍历完成后,判断栈是否为空,若为空,说明所有括号为有效的,返回True;若不为空,返回False。

特殊情况:
1.如果栈为空,下一个字符为括号的右半边,栈最后不可能为空,返回false。
2.如果栈顶元素与下一个右半边括号不匹配,栈最后不可能为空,返回false。

代码如下:

class Solution {
public:
    bool isValid(string s)
    {
        if (s.size() % 2 != 0) return 0;
        stack <char> brk;
        for (int i = 0; i < s.size(); i++)
        {
            if (brk.empty())
            {
                if (s[i] == ')' || s[i] == '}' || s[i] == ']') return 0;
                else brk.push(s[i]);
            }
            else
            {
                if (s[i] == ')' && brk.top() == '(')
                {
                    brk.pop();
                }
                else if (s[i] == '}' && brk.top() == '{')
                {
                    brk.pop();
                }
                else if (s[i] == ']' && brk.top() == '[')
                {
                    brk.pop();
                }
                else if (s[i] == ')' || s[i] == '}' || s[i] == ']') return 0;
                else
                {
                    brk.push(s[i]);
                }
            }
        }
        if (brk.empty()) return 1;
        else return 0;
    }
};

运行结果:

没想到竟然100%
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值