LeetCode 数据结构与算法之有效的括号

简介: LeetCode 数据结构与算法之有效的括号

题目


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


有效字符串需满足:


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


示例 1:


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


示例 2:


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


示例 3:


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


示例 4:


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


示例 5:


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


提示:


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


题解


解题分析


解题思路


--> 😔 <-- 采用栈的方式处理


  1. 定义一个 Stack;


  1. 如果识别为某括号,压栈反括号;


  • 如果是 '(' 压栈 ')'
  • 如果是 '[' 压栈 ']'
  • 如果是 '{' 压栈 '}'


  1. 如果是别的字符串,那么就对应了出栈的顺序,比如:{[()]}会压入 }]) 然后,执行到循环 i = 3 那么出栈,栈顶元素 ) , 且对应为当前的字符串数组,继续下一个下标出栈。


  1. 如果字符串中的遍历 i 下标的字符串和出栈的元素不匹配。那么返回 false. 简化后的代码就是 stack.isEmpty() || c != stack.pop() .


  1. 如果最后栈顶为空(即栈为空)那么该字符串合法。


复杂度


时间复杂度 O(N)


空间复杂度 O(N)


解题代码


题解代码如下(代码中有详细的注释说明):


class Solution {
    public boolean isValid(String s) {
    // 1. 定义一个 Stack
    Stack<Character> stack = new Stack<>();
        for (char c : s.toCharArray()) {
            if (c == '(') {
                // 如果是 '(' 压栈 ')'
                stack.push(')');
            } else if (c == '[') {
                // 如果是 '[' 压栈 ']'
                stack.push(']');
            } else if (c == '{') {
                // 如果是 '{' 压栈 '}'
                stack.push('}');
            } else if (stack.isEmpty() || c != stack.pop()) {
                // 如果栈为空,或者出栈的顺序不是,当前字符返回 false
                return false;
            }
        }
        // 栈为空
        return stack.isEmpty();
    }
}


提交后反馈结果如下:


网络异常,图片无法展示
|


参考信息



相关文章
|
2月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
43 0
|
1月前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
2月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
29 2
|
2月前
|
算法 C++
Leetcode第二十二题(括号生成)
这篇文章讨论了如何使用递归算法解决LeetCode第22题“括号生成”的问题,提供了两种C++的实现方法,目的是生成所有有效的括号组合。
21 0
Leetcode第二十二题(括号生成)
|
2月前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
95 0
|
2月前
力扣(LeetCode)数据结构练习题(2)
力扣(LeetCode)数据结构练习题(2)
31 0
|
2月前
|
存储
力扣(LeetCode)数据结构练习题
力扣(LeetCode)数据结构练习题
56 0
|
2月前
|
存储 C++ 容器
Leetcode第二十题(有效的括号)
这篇文章介绍了如何使用栈来解决LeetCode第20题“有效的括号”问题,提供了两种方法:数组栈和容器栈,以及相应的C++代码实现。
21 0
|
3月前
|
存储 人工智能 C语言
数据结构基础详解(C语言): 栈的括号匹配(实战)与栈的表达式求值&&特殊矩阵的压缩存储
本文首先介绍了栈的应用之一——括号匹配,利用栈的特性实现左右括号的匹配检测。接着详细描述了南京理工大学的一道编程题,要求判断输入字符串中的括号是否正确匹配,并给出了完整的代码示例。此外,还探讨了栈在表达式求值中的应用,包括中缀、后缀和前缀表达式的转换与计算方法。最后,文章介绍了矩阵的压缩存储技术,涵盖对称矩阵、三角矩阵及稀疏矩阵的不同压缩存储策略,提高存储效率。
479 8
|
4月前
|
算法
测试工程师的技能升级:LeetCode算法挑战与职业成长
这篇文章通过作者亲身体验LeetCode算法题的过程,探讨了测试工程师学习算法的重要性,并强调了算法技能对于测试职业成长的必要性。
80 1
测试工程师的技能升级:LeetCode算法挑战与职业成长