美文网首页
20. Valid Parentheses

20. Valid Parentheses

作者: RobotBerry | 来源:发表于2017-05-10 14:13 被阅读0次

    问题

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

    The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

    例子

    ()[]{}
    true

    ({[]})
    true

    ([)]
    false

    分析

    遍历字符串,用一个栈来保存( [ {这些open符号,遇到)]}这些close符号,就做如下判断:

    • 栈为空,说明该字符串不是一个合法的字符串;
    • 栈非空,弹出栈顶。如果栈顶元素和当前close符号匹配,则继续遍历字符串;否则说明该字符串不是一个合法的字符串。

    要点

    栈可以被用来计算表达式的值,也可以验证表达式的合法性。

    时间复杂度

    O(n)

    空间复杂度

    O(n)

    代码

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

    相关文章

      网友评论

          本文标题:20. Valid Parentheses

          本文链接:https://www.haomeiwen.com/subject/ggfgtxtx.html