前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么样的锅配什么样的盖。

什么样的锅配什么样的盖。

作者头像
公众号袁厨的算法小屋
发布2020-11-25 09:46:58
4400
发布2020-11-25 09:46:58
举报

有效的括号

今天我们开始了一个新的模块,栈和队列,另外昨天肝了一篇栈和队列的文章,大家可以先去了解一下<<希望这篇文章能合你的胃口>>,今天我们先来一道经典题热热身。大家一定要记得打卡,这个题目是真不错。

文章里的所有题目都是经过认真挑选的并且所有代码都经过测试大家可以放心食用。

题目描述

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。

示例 1:

输入: "()" 输出: true

示例 2:

输入: "(]" 输出: false

示例 3:

输入: "()]" 输出: false

示例4:

输入:"()[" 输出:false

我这里用了两种方法进行解决,第一种是利用ArrayList,第二种是利用栈,今天主要讲一下用栈的方法。思路很简单,我们遇到左括号就将其入栈,遇到右括号就和栈顶元素进行比较,如果是对应的则pop栈顶元素,不对应直接返回false即可。另外我们还需要考虑的就是示例3和示例4这两种情况,需要我们好好思考一下。

下面我们直接上动图。

合法的括号

题目代码:

代码语言:javascript
复制
class Solution {
    public boolean isValid(String s) {
       Stack<Character> stack = new Stack<Character>();
        //循环遍历字符串
        for(char ch : s.toCharArray()){
            //入栈的三种情况
            if(ch=='('||ch=='['||ch=='{'){
                stack.push(ch);
            }
            //右括号对比,其中注意为空的情况
            if(ch==')'){
                if(stack.isEmpty()||stack.pop()!='('){
                    return false;
                }
            }
            if(ch==']'){
                 if(stack.isEmpty()||stack.pop()!='['){
                    return false;
                 }
            }
             if(ch=='}'){
                 if(stack.isEmpty()||stack.pop()!='{'){
                    return false;
                }
            }
        }
        //遍历结束的情况
        if(!stack.isEmpty()){
            return false;
        }
        return true;
    }
}

这个方法提交的话,接近双一百,是一道非常不错的题目。另外我们改进一下这个代码,让其更简洁。

思路和上面动图代码稍微有些不一样,但是原理是一致的,大家可以看一下代码

代码语言:javascript
复制
class Solution {
    public boolean isValid(String s) {
        LinkedList<Character> stack = new LinkedList<>();
        //遍历字符串
        for (char ch : s.toCharArray()) {
            //遍历到左括号时右括号入栈,右括号来对比时,只需要对比是否相同。
            if (ch == '[') stack.push(']');
            else if (ch == '(') stack.push(')');
            else if (ch == '{') stack.push('}');
            //当ch为右括号时,如果为空,或不对应,则返回false;
            else if (stack.isEmpty() || ch != stack.pop()) return false;
        }
        return stack.isEmpty();//最后判断是否为空。
    }
}

大家如果觉得这篇文章对大家有帮助的话,就请你将它转发给需要的人吧,顺便请大家点个关注和在看吧。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 袁厨的算法小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 有效的括号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档