LeetCode20有效的括号题Java代码输入(])返回true错误原因求解
问题原因
你的代码核心问题是右括号匹配逻辑使用了三个独立的if判断,没有处理括号类型不匹配的场景,匹配失败时不会提前返回false,会继续执行后续遍历逻辑,最终导致结果不符合预期。
错误用例执行复现
输入用例:
"(])"
- 遍历第一个字符
'(':属于左括号,压入栈,栈当前内容:['(']- 遍历第二个字符
']':属于右括号,栈非空
- 第一个
if判断c == ')'不成立,跳过- 第二个
if判断c == ']' && stack.peek() == '[':栈顶是'(',条件不成立,跳过- 第三个
if判断c == '}'不成立,跳过
本次循环无任何操作,直接进入下一轮遍历- 遍历第三个字符
')':属于右括号,栈非空
- 第一个
if判断c == ')' && stack.peek() == '('成立,弹出栈顶,栈变为空- 遍历结束,返回
stack.empty()结果为true,和预期false不符
修复方案
把三个独立的if改为if-else if-else结构,一旦括号类型不匹配直接返回false,修正后的代码如下:
class Solution { public boolean isValid(String s) { Stack<Character> stack = new Stack<>(); for(char c: s.toCharArray()){ if(c == '(' || c == '[' || c == '{'){ stack.push(c); }else{ if(stack.empty()){ return false; } if(c == ')' && stack.peek() == '('){ stack.pop(); } else if(c == ']' && stack.peek() == '['){ stack.pop(); } else if(c == '}' && stack.peek() == '{'){ stack.pop(); } else { // 括号类型不匹配,直接返回无效 return false; } } } return stack.empty(); } }
内容的提问来源于stack exchange,提问作者Binky
相关产品推荐
相关产品推荐

