LeetCode-E20-栈-有效的括号

题目

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

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

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

示例1

输入:"()"
输出: true

示例2

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

示例3

输入:"(]"
输出: false

示例4

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

示例5

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

思路

1.一个简单的例子
如果只有一类符号的该类问题,即假设检测'()'是否是有效字符,则可以通过计数的方法去判断,当遇到'('时总数加1,遇到')'时总数减1。在遍历字符串的过程中,只要出现总数小于0的情况就是无效字符串,以及遍历完成后总数是否为0来判断字符串是否有效。但是此方法对于多种类型的符号,就不再适合。

2.使用栈数据结构
使用栈数据结构,遍历字符串每个符号,遇见开括号,就将其推到栈上,当遇到闭括号,就检查栈顶的元素,如果栈顶是一个相同类型的左括号,我们就将其从栈中弹出。否则,即为无效的字符串。如果遍历完,栈中仍然有元素,这也意味着表达式无效。

解答

class Solution {
public:
    bool isValid(string s) {
        if (s.size() % 2)
            return false;
        stack<char> sta;
        char top;
        for (auto x : s) {
            //右括号,推入栈
            if (x == '(' || x == '[' || x == '{') {
                sta.push(x);
                continue;
            }
            //遇见左括号,但是栈中没有元素
            else if (sta.empty()) return false;  
            
            //如果当前元素与栈顶元素匹配,弹出
            top = sta.top();
            if ((x == ')' && top == '(') || 
                (x == ']' && top == '[') || 
                (x == '}' && top == '{'))
            {
                sta.pop();
            }
            else return false;
        }
        //最后,如果栈为空,则是有效括号
        if (sta.empty())
            return true;
        else
            return false;
    }
};

【关注公众号DoCode,每日一道LeetCode,将零碎时间利用起来】

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,087评论 0 1
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,435评论 0 5
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,267评论 0 4
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,803评论 0 10
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,423评论 0 9