//错误代码
package CH02;
import java.util.Stack;
public class Solution {
public boolean isValid(String s) {
Stack<Character> stack=new Stack<Character>();
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(c=='('||c=='['||c=='{'){
stack.push(c);
}else{
if(stack.isEmpty()){
return false;
}else{
char top=stack.pop();
if(c==')'&&top=='('||c==']'&&top=='['||c=='}'&&top=='{'){
return true;
//这里出错是因为,弹栈时用top与c比较,
如果括号匹配的话,应该进入下一次循环,
所以应该用不等号进行判断,如果不等的话
直接输出结果false,如果像现在这样写的话,
如果top与c匹配,直接就输出true,
就不再进行比较了,而正确的应该是
如果不匹配直接输出false,如果匹配的话
继续循环
}else{
return false;
}
}
}
}
return stack.isEmpty();
}
}
//正确代码
package CH02;
import java.util.Stack;
public class Solution {
public boolean isValid(String s) {
Stack<Character> stack=new Stack<Character>();
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(c=='('||c=='['||c=='{'){
stack.push(c);
}else{
if(stack.isEmpty()){
return false;
}else{
char top=stack.pop();
if(c==')'&&top!='('){
return false;
}
if(c=='}'&&top!='{'){
return false;
}
if(c==']'&&top!='['){
return false;
}
}
}
}
return stack.isEmpty();
}
}