【发布时间】:2020-06-16 15:47:02
【问题描述】:
输入字符串在以下情况下有效:
- 左括号必须用相同类型的括号括起来。
- 开括号必须以正确的顺序闭合。
请注意,空字符串也被认为是有效的。
这是我的代码:
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
int len = s.length();
for(int i=0;i<len;i++){
char cur = s.charAt(i);
if(cur=='{'){
stack.push('{');
}
else if(cur=='['){
stack.push('[');
}
else if(cur =='('){
stack.push('(');
}
else if(stack.peek()=='(' && cur==')'){
System.out.println(stack.peek());
stack.pop();
}
else if(stack.peek()=='[' && cur==']'){
stack.pop();
}
else if(stack.peek()=='{' && cur=='}'){
stack.pop();
}
}
if(stack.empty()) return true;
else return false;
}
}
当我输入如下:
")"
我收到一个错误:
java.util.EmptyStackException
在我检查')' 条件的行中。请解释
【问题讨论】:
-
你需要调试伙伴。这就是你可以改进你的逻辑的方法
-
是的......我看到了问题。提示:如果输入的第一个字符是
)实际会发生什么?仔细阅读代码。 (试试“橡皮鸭调试”....) -
因为在这种情况下,你的堆栈是空的,你试图从中弹出一些东西。不久前有一个similar question。