如何实现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
相关产品推荐
相关产品推荐

