Leetcode 20. 有效的括号

128 阅读2分钟

“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”

一、题目描述

  • 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。

二、思路分析

  • 这道题考察对的理解,栈是后入先出的数据结构
    • 所以我们遇到({[的时候就将他们入栈
    • 当遇到其他情况,就将栈顶元素弹出,并进行判断
    • 如果匹配括号成功,则返回true,否则返回false

三、AC 代码:

class Solution {
    public boolean isValid(String s) {
        //边界条件,长度为零不需要匹配直接返回结果
        if(s.length() == 0){
            return true;
        }
        //创建一个栈用来存放`([{`
        Stack<Character>stack = new Stack<>();
        //循环获取字符串并进行判断
        for(char ch:s.toCharArray()){
            //如果是({[就压入栈中
            if(ch=='('||ch=='{'||ch=='['){
                stack.push(ch);
            }else{
                //如果栈空了,无法匹配返回false
                if(stack.isEmpty()){
                    return false;
                }else{
                    //弹出栈顶元素
                    char temp = stack.pop();
                    //匹配则返回true,继续下一轮匹配,否则返回false
                    if(temp=='['){
                        if(ch!=']'){
                            return false;
                        }
                    }else if(temp =='('){
                        if(ch!=')'){
                            return false;
                        }
                    }else{
                        if(ch!='}'){
                            return false;
                        }
                    }
                }
            }
        }
        //最后栈应该是空的才返回true
        return stack.isEmpty()?true:false;
    }
}

四、总结:

  • 好了,代码撸完,我们总结一下
    • 利用栈后进先出的特性

    • 如果是左括号就进栈,反之取栈顶元素检查匹配度

    • 要注意判断栈是否为空

最后这个算法是Leetcode的第20题,是热题100的第11题,去年我刷了热题100用时一个月左右,接下来我会继续更新,小伙伴可以点赞关注,如果你也在刷热题100的话,希望可以对你有一些启发!