LeetCode之有效的括号

这是一道经典的栈的问题,我的思路就是遇到左括号进栈,遇到右括号看栈顶元素是不是匹配,如果是匹配的则出栈,前面先判断第一个字符是不是右括号,还有字符串的长度给卡掉一些数据,中间每次要判断是不是为空,不然会运行错误,最后如果栈空了则是有效的,否则是无效的。

class Solution {
public:
    bool isValid(string s) {
        stack<char>flag;//把左括号全部存进去
        if( s.length() == 1 || s[0] == ']' 
           || s[0] == '}' || s[0] == ')' ) return false;//简单的卡掉一些非法数据
        for( int i = 0 ; i < s.length() ; i++ ){
            if( s[i] == '(' || s[i] == '{' || s[i] == '[' ) flag.push(s[i]);//入栈
            else if( s[i] == ')' ){
                if( flag.empty() ) return false;//判断非空
                if( flag.top() != '(' ) return false;//看是否匹配
                flag.pop();
            }
            else if( s[i] == ']' ){
                if( flag.empty() ) return false;
                if( flag.top() != '[' ) return false;
                flag.pop();
            }
            else if( s[i] == '}' ){
                if( flag.empty() ) return false;
                if( flag.top() != '{' ) return false;
                flag.pop();
            }
        }
        if( flag.empty() ) return true;
        else return false;
    }
};

猜你喜欢

转载自blog.csdn.net/wuhenglan/article/details/88314115