给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

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

示例 3:

输入: "(]"
输出: false

示例 4:

输入: "([)]"
输出: false

示例 5:

输入: "{[]}"
输出: true





//章节 - 队列和栈    
//三、栈:先入后出的数据结构
//2.有效的括号
/*
算法思想:
    简单题,看注释即可。
*/
//算法实现:
class Solution {
public:
    bool isValid(string s) {
        stack<char>symbols;
        for (int i = 0; i<s.size(); ++i) {
            if (s[i] == '(' || s[i] == '{' || s[i] == '[') {
                symbols.push(s[i]);
            }
            else {
                if (s[i] == ' ')
                    continue;
                if(symbols.empty()) //此时为右括号,栈空肯定不匹配则失败
                    return false;
                char temp, top;
                if (s[i] == ')')
                    temp = '(';
                else if (s[i] == '}')
                    temp = '{';
                else if (s[i] == ']')
                    temp = '[';
                top = symbols.top();
                symbols.pop();
                if (temp != top)    //若与栈顶元素不匹配则失败
                    return false;
            }
        }
        if (!symbols.empty())   //最后栈不空,说明还有没匹配的则失败
            return false;
        else
            return true;
    }
};