【两次过】Lintcode 423:有效的括号序列

给定一个字符串所表示的括号序列,包含以下字符: '(', ')''{''}''[' and ']', 判定是否是有效的括号序列。

样例

括号必须依照 "()" 顺序表示, "()[]{}" 是有效的括号,但 "([)]"则是无效的括号。

解题思路:

    利用栈的思想,遇到左括号,全部压入栈中;遇到右括号或其他,判断栈顶的元素是否是相对应的左括号,若是则弹出栈顶元素,若不是则返回false,若栈为空,也返回false;

    注意在一开始设限定条件时,奇数个数目的必然不是配对的。

class Solution {
public:
    /**
     * @param s: A string
     * @return: whether the string is a valid parentheses
     */
    bool isValidParentheses(string &s) 
    {
        // write your code here
        if(s.size()%2 == 1 || s.empty())
            return false;
        
        stack<char> res;
        
        for(int i=0;i<s.size();i++)
        {
            if(s[i] == '(' || s[i] == '{' || s[i] == '[')
                res.push(s[i]);
            else if(s[i] == ')')
            {
                if(!res.empty() && res.top() == '(')
                    res.pop();
                else
                    return false;
            }
            else if(s[i] == '}')
            {
                if(!res.empty() && res.top() == '{')
                    res.pop();
                else
                    return false;
            }
            else if(s[i] == ']')
            {
                if(!res.empty() && res.top() == '[')
                    res.pop();
                else
                    return false;
            }
        }
        

        if(res.empty())
            return true;
        else
            return false;
    }
};


猜你喜欢

转载自blog.csdn.net/majichen95/article/details/80724844