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();
    }
}


提交后反馈结果如下:


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


参考信息



相关文章
|
9天前
|
存储 算法 搜索推荐
力扣每日一题 6/13 反悔贪心算法
力扣每日一题 6/13 反悔贪心算法
8 1
|
20天前
|
算法 Java
[Java·算法·简单] LeetCode 283. 移动零
[Java·算法·简单] LeetCode 283. 移动零
19 2
|
20天前
|
算法 Java
[Java·算法·中等] LeetCode21. 合并两个有序链表
[Java·算法·中等] LeetCode21. 合并两个有序链表
17 2
|
23天前
|
存储 算法 调度
力扣中级算法(Python)
力扣中级算法(Python)
|
22天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
22天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
23天前
|
算法 Python
力扣初级算法(Python)(二)
力扣初级算法(Python)(二)
|
23天前
|
算法 Python
力扣初级算法(Python)(一)
力扣初级算法(Python)(一)
|
6天前
|
算法 测试技术
力扣经典150题第五十一题:有效的括号
力扣经典150题第五十一题:有效的括号
11 0
|
12天前
|
算法 C语言 计算机视觉
【数据结构与算法 经典例题】括号匹配问题
【数据结构与算法 经典例题】括号匹配问题