图解LeetCode——20. 有效的括号

简介: 图解LeetCode——20. 有效的括号

一、题目

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

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。
  • 每个右括号都有一个对应的相同类型的左括号。

二、示例

2.1> 示例 1:

输入】s = "()"

输出】true

2.2> 示例 2:

输入】s = "()[]{}"

输出】true

2.3> 示例 3:

输入】s = "(]"

输出】false

提示:

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

三、解题思路

根据题目描述,我们需要校验给定的字符串s是否是有效字符串,这里的“有效”就是通过是否是完整括号来决定的(小括号中括号大括号)。那么,对于这种字符“配对”的题目,我们就很容易能够想到,可以采用堆栈的方式进行解题。那么此处,我们可以采用Stack类来提供堆栈能力的支持,也可以使用双向队列Deque来提供堆栈能力的支持,由于在LeetCode的执行效率中,Deque的执行效率是要比Stack高的,所以我建议大家采用Deque来模拟堆栈行为

基本的解题思想确定了之后,我们就可以通过遍历字符串 + 堆栈来进行解题了。假设我们将遍历到字符串s的字符称为c,那么此处入栈我们指定了3个约束条件:

条件1】如果遍历的字符c等于'(',那么我们就将字符‘)’执行入栈操作;

条件2】如果遍历的字符c等于'[',那么我们就将字符‘]’执行入栈操作;

条件3】如果遍历的字符c等于'{',那么我们就将字符‘}’执行入栈操作;

那么,针对不满足以上3个条件,我们只需要执行如下判断:

判断1】将stack栈顶元素弹出,如果它等于c,则继续执行;

判断2】将stack栈顶元素弹出,如果它不等于c,则终止执行,返回false;

好了,以上就是本题的解题思路了,为了方便大家理解,我们以输入s = "()[){}"为例,看一下其具体的执行过程是怎么样的。具体详情,请见下图所示:

四、代码实现

class Solution {
    public boolean isValid(String s) {
        Deque<Character> stack = new ArrayDeque();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == '(') stack.addLast(')');
            else if (c == '[') stack.addLast(']');
            else if (c == '{') stack.addLast('}');
            else if (stack.isEmpty() || c != stack.removeLast()) return false;
        }
        return stack.isEmpty();
    }
}

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

相关文章
|
9月前
|
存储 C语言 索引
环形链表、环形链表 II、有效的括号​​​​​​​【LeetCode刷题日志】
环形链表、环形链表 II、有效的括号​​​​​​​【LeetCode刷题日志】
|
3月前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
4月前
|
算法 C++
Leetcode第二十二题(括号生成)
这篇文章讨论了如何使用递归算法解决LeetCode第22题“括号生成”的问题,提供了两种C++的实现方法,目的是生成所有有效的括号组合。
32 0
Leetcode第二十二题(括号生成)
|
4月前
|
存储 C++ 容器
Leetcode第二十题(有效的括号)
这篇文章介绍了如何使用栈来解决LeetCode第20题“有效的括号”问题,提供了两种方法:数组栈和容器栈,以及相应的C++代码实现。
28 0
|
6月前
|
算法
LeetCode第22题括号生成
该文章介绍了 LeetCode 第 22 题括号生成的解法,通过回溯算法生成所有可能的括号组合,在递归过程中根据左右括号数量的条件进行剪枝,从而得到有效的括号组合。
LeetCode第22题括号生成
|
6月前
|
存储 算法
LeetCode第20题有效的括号
该文章介绍了 LeetCode 第 20 题有效的括号的解法,通过分析有效括号的特征,使用栈结构存储括号关系,判断遇到右边括号时栈顶是否有匹配的左边括号,从而解决问题,同时总结了栈的先进后出结构可用于解决有规律的符号匹配问题。
LeetCode第20题有效的括号
|
6月前
|
算法 Python
【Leetcode刷题Python】括号匹配问题
一种解决括号匹配问题的Python实现方法,通过计算给定括号串的所有子串的最长合法括号子序列长度之和来确定权值。
45 0
|
6月前
|
机器学习/深度学习 Python
【Leetcode刷题Python】22. 括号生成
本文介绍了了LeetCode题目22的两种Python编程解决方案,题目要求生成所有可能的且有效的括号组合,包括暴力求解和回溯方法。
37 0
|
6月前
|
Python
【Leetcode刷题Python】20. 有效的括号
LeetCode上题目“20. 有效的括号”的Python解决方案,使用栈数据结构来验证括号序列的有效性。具体实现中,会在栈中预先放置一个特殊字符以避免在弹出操作时出现空栈错误,并通过匹配左右括号来判断括号序列是否有效。
64 0
|
8月前
|
算法 Java C语言
【经典算法】LeetCode 20:有效的括号(Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode 20:有效的括号(Java/C/Python3实现含注释说明,Easy)
65 1