LeetCode刷题-20.有效的括号

bridge
2022-02-02 / 0 评论 / 0 点赞 / 762 阅读 / 1,144 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-02-02,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses/

一、题目

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

有效字符串需满足:

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

示例 1:

输入:s = "()"
输出:true

示例 2:

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

示例 3:

输入:s = "(]"
输出:false

示例 4:

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

示例 5:

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

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

二、题解

解题源码: 链接

\时间复杂度空间复杂度
O(n)O(n)

2.1.栈

2.1.1.算法步骤

  • 栈先入后出特点恰好与本题括号排序特点一致,即若遇到左括号入栈,遇到右括号时将对应栈顶左括号出栈,则遍历完所有括号后 stack 仍然为空;
  • 建立哈希表 dic 构建左右括号对应关系:key 左括号,value 右括号;这样查询 2 个括号是否对应只需 O(1) 时间复杂度;建立栈 stack,遍历字符串 s 并按照算法流程一一判断。

2.1.2.动画演示

2.1.3.复杂度分析

  • 时间复杂度:O(n),正确的括号组合需要遍历 11 遍 s。
  • 空间复杂度:O(n)。哈希表和栈使用线性的空间大小。

2.1.4.参考代码

解题源码: 链接

public class Id_0020_Stack implements Id_0020 {

    @Override
    public boolean isValid(String s) {
        if(s.isEmpty())
            return true;

        Stack<Character> stack=new Stack<Character>();
        for(char c:s.toCharArray()){
            if(c=='(')
                stack.push(')');
            else if(c=='{')
                stack.push('}');
            else if(c=='[')
                stack.push(']');
            else if(stack.empty()||c!=stack.pop())
                return false;
        }

        return stack.empty();
    }

}

参考:https://leetcode-cn.com/problems/valid-parentheses/solution/zhu-bu-fen-xi-tu-jie-zhan-zhan-shi-zui-biao-zhun-d/


以上是个人学习记录,如有不正确请多多包涵,也欢迎评论告诉我,谢谢~


0

评论区