You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Java字符串括号匹配逻辑?判断括号是否按顺序闭合

解决Java括号匹配问题的实用方案

嘿,这可是面试里常考的经典问题!要判断括号是否按正确顺序闭合,用**栈(Stack)**来处理是最直观高效的方式,因为括号匹配正好符合「后进先出」的规则——最后打开的括号必须最先闭合。

核心逻辑拆解

我给你一步步理清楚思路:

  • 首先快速过滤不可能匹配的情况:如果字符串长度是奇数,直接返回false(毕竟括号都是成对出现的)
  • 准备一个栈来存左括号:遇到(、{、[这类左括号,就把它压进栈里
  • 遇到右括号的时候:
    • 先看栈是不是空的——要是空的,说明根本没有对应的左括号,直接返回false
    • 取出栈顶的左括号,看看和当前右括号是不是一对:)对应(,}对应{,]对应[
    • 不匹配就返回false,匹配的话就把栈顶的左括号弹出去,继续遍历
  • 遍历完所有字符后,别忘了检查栈是不是空的:要是栈里还剩左括号,说明有没闭合的,返回false;空的话就说明所有括号都正确闭合了

完整Java代码实现

import java.util.Stack;

public class BracketChecker {
    public static boolean isValidBrackets(String s) {
        // 奇数长度直接排除,不可能成对
        if (s.length() % 2 != 0) {
            return false;
        }

        Stack<Character> bracketStack = new Stack<>();

        for (char currentChar : s.toCharArray()) {
            // 左括号入栈
            if (currentChar == '(' || currentChar == '{' || currentChar == '[') {
                bracketStack.push(currentChar);
            } else {
                // 右括号出现时栈为空,无对应左括号
                if (bracketStack.isEmpty()) {
                    return false;
                }
                char topBracket = bracketStack.pop();
                // 检查括号是否匹配
                boolean isMismatch = (currentChar == ')' && topBracket != '(')
                        || (currentChar == '}' && topBracket != '{')
                        || (currentChar == ']' && topBracket != '[');
                if (isMismatch) {
                    return false;
                }
            }
        }

        // 遍历结束后栈必须为空,才算完全匹配
        return bracketStack.isEmpty();
    }

    public static void main(String[] args) {
        // 测试示例1:注意你提到的"{({)}}"实际是不匹配的,可能是笔误?
        // 如果是"{({})}"(正确嵌套),会返回true
        String example1 = "{({)}}";
        System.out.println(isValidBrackets(example1)); // 实际输出false,建议检查示例是否有误
        // 测试示例2:"{([)}]" 确实返回false
        String example2 = "{([)}]";
        System.out.println(isValidBrackets(example2)); // 输出false
    }
}

小提醒

  • 你提到的示例1"{({)}}"其实是不匹配的(中间的{后面跟着的是),完全不对应),正常运行代码会返回false。大概率是题目描述的笔误,应该是"{({})}"这种正确嵌套的结构,才会返回true哦。
  • 最后检查栈是否为空这一步很重要!比如输入"(((",遍历完栈里还剩3个左括号,这时候必须返回false。

内容的提问来源于stack exchange,提问作者vicky sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:17:58