凌云的博客

行胜于言

LeetCode 算法题 20. 有效的括号

分类:algorithm| 发布时间:2016-07-04 23:59:00


题目

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

有效字符串需满足:

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

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

示例 1:

输入: "()"
输出: true

示例 2:

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

示例 3:

输入: "(]"
输出: false

示例 4:

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

示例 5:

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

解法

class Solution {
public:
    bool isValid(string s) {
        stack<char> expect;
        for (char c: s) {
            switch (c) {
                case '(':
                    expect.push(')');
                    break;
                case '{':
                    expect.push('}');
                    break;
                case '[':
                    expect.push(']');
                    break;
                case ')':
                case ']':
                case '}':
                    if (expect.empty() || expect.top() != c) {
                        return false;
                    }

                    expect.pop();
                    break;
                default:
                    return false;
            }
        }

        return expect.empty();
    }
};