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

本文介绍一种基于栈的 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();
    }
}

正确示例验证

⚠️ 注意事项

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

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