leetcode-简单题-20.有效的括号

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对象本身
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值