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;
    }
    
  • 相关阅读:
    java编码规范
    Unix操作系统内核结构报告
    vim常用命令组合
    JavaWeb学习笔记13--Servlet开发(二)
    JavaWeb学习笔记12--Servlet开发(一)
    JavaWeb学习笔记11--JSTL标签库
    JavaWeb学习笔记10--Cookie实现记住密码的功能
    JavaWeb学习笔记9--JSP属性范围
    JavaWeb学习笔记8--JSP内置对象详解
    JavaWeb学习笔记7--JSP脚本元素、指令元素、动作元素
  • 原文地址:https://www.cnblogs.com/sunshineliulu/p/12543342.html
Copyright © 2011-2022 走看看