给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
注意:包装类和基本类的区别我在Stack中用了char然后报错了
包装类是对象,基本类型不是,所以包装类的引用存放在stack中,实例存放在heap中
public Boolean isValid(String s){
Stack<Character> stack=new Stack<Character>();
int i;
for (i=0;i<s.length();i++){
//遇到左括号全部压栈
if(s.charAt(i)=='('||s.charAt(i)=='{'||s.charAt(i)=='[')
stack.push(s.charAt(i));
//遇到右括号看与栈顶元素是否匹配
if(s.charAt(i)==')‘||s.charAt(i)=='}'||s.charAt(i)==']'){
//如果栈空说明没有匹配的左括号
if(stack.empty())return false;
if (s.charAt(i)=='}"&&stack.peek()!='{'){
return false;
}else if(s.charAt(i)==')'&&stack.peek()!='('){
return false;
}else if(s.charAt(i)=='['&&stack.peek()!=']'){
return false;
}else{
stack.pop();
}
}
}
//判断有无多的括号({}
if(!stack.empty()){return false;}
return true;
}
}