Leetcode有效的括号算法与分析

@Leetcode有效的括号

相信有效的括号对于大多数的小白coder并不陌生,每个人在学习数据结构的栈的这一章节时都会接触到或者至少了解到这一问题。本题是使用栈结构的一个标志性的题因为栈结构先进后出的特性十分符合括号一层包一层的关系。废话少说,来看题干:

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。注意空字符串可被认为是有效字符串。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。

示例 1:

输入: “()”
输出: true

示例 2:

输入: “()[]{}”
输出: true

示例 3:

输入: “(]”
输出: false

示例 4:

输入: “([)]”
输出: false

示例 5:

输入: “{[]}”
输出: true

本题题意上几乎已经揭示需要使用栈结构,那么我们需要先建立一个栈。括号的栈使用规则是建立在括号的成双配对的,而本题并没有要求括号必须要按照小括号中括号大括号的顺序来,故少了一些判断,仅需在每一个左括号出现时进行push压栈,在每个右括号出现时选取top最顶的元素,判断是否匹配即可。
代码如下:

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

在这里插入图片描述
显然本题在细节方面是需要注意的,并且需要一定的栈结构的基础来完成,题中对栈结构的定义有可能出现问题,具体情况如下图,相信不少coder都曾遇到:
在这里插入图片描述
这是因为最后的return没有用stack的返回,而系统要求返回值需要与所定义的一致,此处只需要将最终输出的判断改成st.empty()的判断就行。还有一种错误如下图:
在这里插入图片描述
当出现这种错误的时候请检查是否有重复的判断条件或者在循环内判断了s.empty(),这些都有可能导致这种错误。

其他的判断与细节无需赘述,就是别忘记一定要把判断过后的单元pop一下啦。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值