力扣经典150题第五十一题:有效的括号

简介: 力扣经典150题第五十一题:有效的括号

题目描述和要求

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

有效字符串需满足:

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

示例解释

示例 1:

输入:s = “()”

输出:true

示例 2:

输入:s = “()[]{}”

输出:true

示例 3:

输入:s = “(]”

输出:false

解题思路

可以使用栈来解决这个问题。遍历字符串,遇到左括号则入栈,遇到右括号则出栈。如果当前右括号与栈顶的左括号不匹配,则字符串无效。最后,如果栈为空,则字符串有效,否则无效。

算法实现

import java.util.Stack;
public class ValidParentheses {
    public boolean isValid(String s) {
        if (s == null || s.length() == 0) {
            return true;
        }
        Stack<Character> stack = new Stack<>();
        for (char c : s.toCharArray()) {
            if (c == '(' || c == '[' || c == '{') {
                stack.push(c);
            } else {
                if (stack.isEmpty()) {
                    return false;
                }
                char top = stack.pop();
                if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) {
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }
}

复杂度分析

  • 时间复杂度:O(n),其中 n 为字符串 s 的长度。遍历一次字符串。
  • 空间复杂度:O(n),最坏情况下栈的空间复杂度为 O(n)。

测试和验证

编写测试用例对算法进行验证,确保其正确性和健壮性。

public class Main {
    public static void main(String[] args) {
        ValidParentheses validParentheses = new ValidParentheses();
        String s1 = "()";
        System.out.println(validParentheses.isValid(s1)); // true
        String s2 = "()[]{}";
        System.out.println(validParentheses.isValid(s2)); // true
        String s3 = "(]";
        System.out.println(validParentheses.isValid(s3)); // false
    }
}

总结和拓展

本题通过使用栈来判断字符串中的括号是否有效,实现了对字符串有效性的判断。这个算法思路清晰简单,在处理类似问题时是一个不错的选择。

除了当前算法,我们也可以考虑其他实现方式,例如使用递归、正则表达式等方法来解决类似问题。

参考资料

  • 《力扣经典150题》
  • LeetCode 官方网站
相关文章
|
2月前
|
存储 C语言 索引
环形链表、环形链表 II、有效的括号​​​​​​​【LeetCode刷题日志】
环形链表、环形链表 II、有效的括号​​​​​​​【LeetCode刷题日志】
|
2月前
leetcode-301:删除无效的括号
leetcode-301:删除无效的括号
28 0
|
27天前
|
算法 Java C语言
【经典算法】LeetCode 20:有效的括号(Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode 20:有效的括号(Java/C/Python3实现含注释说明,Easy)
17 1
|
19天前
|
算法
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
|
19天前
|
算法
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
|
23天前
|
SQL 算法 数据可视化
LeetCode 题目 32:最长有效括号【python】
LeetCode 题目 32:最长有效括号【python】
|
23天前
|
存储 SQL 算法
LeetCode第22题:生成括号【22/1000 python 递归|动态规划】
LeetCode第22题:生成括号【22/1000 python 递归|动态规划】
|
23天前
|
SQL 算法 数据挖掘
探索有效括号 力扣第20题:从栈到递归的多角度解法 【含图解 python】
探索有效括号 力扣第20题:从栈到递归的多角度解法 【含图解 python】
LeetCode | 20. 有效的括号
LeetCode | 20. 有效的括号
|
2月前
leetcode代码记录(有效的括号
leetcode代码记录(有效的括号
18 1