验证字符串中的花括号 {}、方括号 [] 和圆括号 () 是否符合嵌套优先级规则并正确闭合,通常可以通过栈(Stack)数据结构来实现。以下是具体步骤和方法:一
作者:吹吹风会发光
时间:2026-04-09
浏览:0
本文介绍一种基于栈的Java实现方法,用于判断字符串中的{、[、(是否满足严格嵌套顺序(即(必须在[内,[必须在{内),且所有括号均成对、正确闭合。

本文介绍一种基于栈的 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 stack = new ArrayDeque<>();
Map 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) 空间复杂度,精准建模了“括号类型层级不可逆”的业务约束,是处理多级优先嵌套校验的经典栈模式实践。
作者最新文章
iphone蓝牙连接ipad有什么用及连接方法教程
2026-09-21 17:28
PDF怎么取消密码保护?4种解锁方法整理
2026-09-08 18:23
三星 Galaxy Z Fold8 内屏边角支撑偏软?实测与官方回应
2026-09-08 16:39
手机Excel表格制作教程:小屏幕高效录入与格式调整指南
2026-09-04 09:27
PDF文档按页转换成图片怎么做?在线转换步骤整理
2026-09-03 11:06
上一篇:
乐天卖家中心入口及登录指南
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































