0
点赞
收藏
分享

微信扫一扫

力扣20-有效的括号(C++,附思路)

老榆 2022-02-14 阅读 72
c++leetcode

 思路:

栈适用于解决匹配之类的问题,在学习数据结构的时候老师讲过,用栈实现简易计算器的题目中也有所练习,所以应该能想到这个题用stack解决。

题目中2.必须以正确的顺序闭合就是如果输入的是([,那么闭合的顺序必须是]),反了就不行。

所以大体思路就是只让左括号入栈,遇到了右括号就与栈顶元素匹配判断出栈,最后如果ok的话栈内应该是没有元素的,这个时候返回true,不然返回false。

之后再来看小的细节,一个就是如果右括号数量多了,比如"]",一开始就是右括号,而这个时候栈内是没有元素的,自然不能进行top和pop操作,如果是这种情况直接返回false,另外,如果括号不匹配也返回false。

代码如下:

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

 

举报

相关推荐

0 条评论