商城首页欢迎来到中国正版软件门户

您的位置:首页 >验证字符串中的花括号 {}、方括号 [] 和圆括号 () 是否符合嵌套优先级规则并正确闭合,通常可以通过栈(Stack)数据结构来实现。以下是具体步骤和方法:一

验证字符串中的花括号 {}、方括号 [] 和圆括号 () 是否符合嵌套优先级规则并正确闭合,通常可以通过栈(Stack)数据结构来实现。以下是具体步骤和方法:一

  发布于2026-04-09 阅读(0)

扫一扫,手机访问

如何验证字符串中花括号、方括号和圆括号是否符合嵌套优先级规则并正确闭合

本文介绍一种基于栈的 Java 实现方法,用于判断字符串中的 {、[、( 是否满足严格嵌套顺序(即 ( 必须在 [ 内,[ 必须在 { 内),且所有括号均成对、正确闭合。

本文介绍一种基于栈的 Java 实现方法,用于判断字符串中的 `{`、`[`、`(` 是否满足严格嵌套顺序(即 `(` 必须在 `[` 内,`[` 必须在 `{` 内),且所有括号均成对、正确闭合。

要验证括号是否“按序嵌套且合法闭合”,关键在于两点:结构合法性(每对括号自身匹配)和层级合法性(嵌套必须遵循 { → [ → ( 的严格递降顺序)。普通括号匹配(如 LeetCode 20)仅检查匹配性,而本题额外要求:不允许 (a[b{c}d]e) 这类 { 出现在 ( 内部的反序嵌套。

解决方案是使用 栈(Stack)记录当前允许的最内层括号类型。栈中只存开括号,且必须严格按 { → [ → ( 顺序压入;每当遇到闭括号时,必须与栈顶开括号精确匹配,且匹配后弹出——最终栈为空才表示完全合法。

以下是完整、健壮的 Java 工具方法实现:

import java.util.*;

public class BracketValidator {
    public static boolean isValidNested(String s) {
        if (s == null) return false;
        Deque<Character> stack = new ArrayDeque<>();
        Map<Character, Character> pairs = Map.of(')', '(', ']', '[', '}', '{');

        for (char c : s.toCharArray()) {
            if (c == '(' || c == '[' || c == '{') {
                // 检查嵌套顺序:新括号不能比栈顶“更外层”
                if (!stack.isEmpty()) {
                    char top = stack.peek();
                    if ((c == '(' && top != '[') || 
                        (c == '[' && top != '{') || 
                        (c == '{' && !stack.isEmpty())) {
                        // '{' 只能作为最外层,若栈非空则已存在外层,非法
                        return false;
                    }
                }
                stack.push(c);
            } else if (c == ')' || c == ']' || c == '}') {
                if (stack.isEmpty() || stack.pop() != pairs.get(c)) {
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }
}

正确示例验证

  • "([a]b)" → false(( 在 [ 外,违反顺序)
  • "[a(b)c]" → true(( 在 [ 内,合法)
  • "{a[b(c)d]e}" → true(( ⊂ [ ⊂ {,完全合规)
  • "{a[b]c}" → true(无 ( 但 [ 在 { 内,仍合规)

⚠️ 注意事项

  • 该逻辑不依赖字符位置或计数,而是通过栈状态实时约束嵌套深度与类型;
  • 空格、字母、数字、运算符等非括号字符被自动忽略;
  • 若需支持 Unicode 或扩展括号(如 《》),需扩展 pairs 映射及顺序校验逻辑;
  • 生产环境建议用 ArrayDeque 替代 Stack(后者已过时且线程不安全)。

总结:此方案以 O(n) 时间复杂度和 O(n) 空间复杂度,精准建模了“括号类型层级不可逆”的业务约束,是处理多级优先嵌套校验的经典栈模式实践。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注