class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
char[] arr = s.toCharArray();
for(char ch : arr){
if(ch == '(' || ch == '{' || ch == '[')
stack.push(ch);
else if(stack.isEmpty()==false){
if(ch==')' && stack.peek()=='(')
stack.pop();
else if(ch==']' && stack.peek()=='[')
stack.pop();
else if(ch=='}' && stack.peek()=='{')
stack.pop();
else
stack.push(ch);
}
else
stack.push(ch);
};
return (stack.size()==0);
}
}
//这个题目用stack的方法来写,终究还是遇到了数据结构相关的题目
//两种类型的括号不能交叉括起来
//将每一个括号入栈,如果遇到栈内相邻两个括号匹配,则两个括号出栈,最后检查堆栈是否为空即可
//入栈stack.push(),出栈stack.pop(),栈空检测stack.isEmpty(),获取栈顶元素stack.peak()
//问题记录:区分字符串和字符数组,以及他们之间怎么去转换->toCharArray
//问题记录:if里面不是用or,and,而是&&,||
优解:
class Solution {
public boolean isValid(String s) {
Stack<Character>stack = new Stack<Character>();
for(char c: s.toCharArray()){
if(c=='(')stack.push(')');
else if(c=='[')stack.push(']');
else if(c=='{')stack.push('}');
else if(stack.isEmpty()||c!=stack.pop())return false;//没有左括号入栈或者左右不匹配;
}
return stack.isEmpty();
}
}
知识点:stack.pop()无论在不在if语句里面,它都已经对stack进行了操作,因为该方法针对stack对象本身