• LeetCode 第 20 号问题:有效的括号


    本文首发于公众号「五分钟学算法」,是 图解 LeetCode 系列文章之一。
    个人网站: https://www.cxyxiaowu.com

    题目来源于 LeetCode 上第 20 号问题:有效的括号。题目难度为 Easy,目前通过率为 37.8% 。

    题目描述

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

    有效字符串需满足:

    1. 左括号必须用相同类型的右括号闭合。
    2. 左括号必须以正确的顺序闭合。

    注意空字符串可被认为是有效字符串。

    示例 1:

            输入: "()"
    输出: true
          

    示例 2:

            输入: "()[]{}"
    输出: true
          

    示例 3:

            输入: "(]"
    输出: false
          

    示例 4:

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

    示例 5:

            输入: "{[]}"
    输出: true
          

    题目解析

    这道题让我们验证输入的字符串是否为括号字符串,包括大括号,中括号和小括号。

    这里我们使用

    • 遍历输入字符串
    • 如果当前字符为左半边括号时,则将其压入栈中
    • 如果遇到右半边括号时,分类讨论:
    • 1)如栈不为空且为对应的左半边括号,则取出栈顶元素,继续循环
    • 2)若此时栈为空,则直接返回false
    • 3)若不为对应的左半边括号,反之返回false

    动画描述


    v2-d73a226d8329befb1f16533545257b33_b.gif


    代码实现

            class Solution {
    public:
        bool isValid(string s) {
    
            stack<char> stack;
            for( int i = 0 ; i < s.size() ; i ++ )
                if( s[i] == '(' || s[i] == '{' || s[i] == '[')
                    stack.push(s[i]);
                else{
    
                    if( stack.size() == 0 )
                        return false;
    
                    char c = stack.top();
                    stack.pop();
    
                    char match;
                    if( s[i] == ')' ){
                        match = '(';
                    }
                    else if( s[i] == ']' ){
                        match = '[';
                    }
                    else{
                        match = '{';
                    }
    
                    if(c != match)  return false;
                }
    
            if( stack.size() != 0 )
                return false;
    
            return true;
        }
    };
          

    我的专栏:

    和程序员小吴一起学算法


    ❤️ 看完三件事:

    如果你觉得这篇内容对你挺有启发,我想邀请你帮我三个忙:

    1. 点赞,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-
    2. 关注我和专栏,让我们成为长期关系
    3. 关注公众号「五分钟学算法」,第一时间阅读最新的算法文章,公众号后台回复 1024 送你 50 本 算法编程书籍。

    v2-7d84a7f4361bd5f8d21b98b9edb0b1b4_b.jpg

  • 相关阅读:
    springnodejs
    js CacheQueue
    权重练习
    架构师速成8.3-可用性之分库分表
    架构师速成8.3-可用性之分布式
    架构师速成8.3-可用性
    架构师速成8.3-架构师必须要了解的规则(转)
    架构师速成6.15-开发框架-单点登录
    架构师速成6.14-开发框架-异常处理
    架构师速成6.13-开发框架-前后结合
  • 原文地址:https://www.cnblogs.com/csnd/p/16675401.html
Copyright © 2020-2023  润新知