zoukankan      html  css  js  c++  java
  • LeetCode#20-Valid Parentheses-有效的括号

    一、题目

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

    有效字符串需满足:
    1.左括号必须用相同类型的右括号闭合。
    2.左括号必须以正确的顺序闭合。

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

    示例 1:

    输入: "()"
    输出: true
    

    示例 2:

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

    示例 3:

    输入: "(]"
    输出: false
    

    示例 4:

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

    示例 5:

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

    二、题解

    这道题是很简单了,一个栈就能搞定。
    先判断字符串的长度,有效的括号一定是偶数,如果是奇数,一定不匹配;
    设置一个有效括号数组 validMap,放入配对的括号;
    设置一个栈 stack
    遍历字符串,如果是左括号,就放入到栈中,如果是右括号,就判断栈顶元素(一定是左括号)在有效括号中的右括号和这个右括号是否相等,如果相等,就出栈,否则就是不匹配,直接返回 false 即可。
    时间复杂度:O(n),空间复杂度:O(n)

    function isValid($s) {
        if (empty($s)) {
            return true;
        }
        //有效括号的个数一定是偶数
        $len = strlen($s);
        if ($len % 2 != 0) {
            return false;
        }
    
        $validMap = ['(' => ')', '{' => '}', '[' => ']'];
        $stack = [];
        for ($i = 0; $i < $len; $i++) {
            if (isset($validMap[$s[$i]])) {
                $stack[] = $s[$i];
            } else {
                if ($validMap[end($stack)] == $s[$i]) {
                    array_pop($stack);
                } else {
                    return false;
                }
            }
        }
        if (!empty($stack)) {
            return false;
        }
        return true;
    }
    
  • 相关阅读:
    lldb
    错误记录
    越狱后
    c#学习
    26python类
    day01
    第二冲刺阶段第四天
    第二冲刺阶段第三天
    第五周课后作业
    结对作业
  • 原文地址:https://www.cnblogs.com/sunshineliulu/p/12543342.html
Copyright © 2011-2022 走看看