您的位置:首页 >验证字符串中的花括号 {}、方括号 [] 和圆括号 () 是否符合嵌套优先级规则并正确闭合,通常可以通过栈(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();
}
}✅ 正确示例验证:
⚠️ 注意事项:
总结:此方案以 O(n) 时间复杂度和 O(n) 空间复杂度,精准建模了“括号类型层级不可逆”的业务约束,是处理多级优先嵌套校验的经典栈模式实践。
上一篇:乐天卖家中心入口及登录指南
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9