• 【C++、栈、结果双100%】LeetCode20 有效的括号


    1. 有效的括号

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

    有效字符串需满足:

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

    示例 1:

    输入: “()”
    输出: true

    示例 2:

    输入: “()[]{}”
    输出: true

    示例 3:

    输入: “(]”
    输出: false

    示例 4:

    输入: “([)]”
    输出: false

    示例 5:

    输入: “{[]}”
    输出: true

    #include<stack>
    class Solution {
    public:
        bool isValid(string s) {
            if(s.empty()){//空字符串默认合法
                return true;
            }
    
            stack<char> sc;//新建一个名为sc的栈,栈中保存的数据类型为char
    
            for(auto i:s){//遍历字符串中的每个字符
                if(i==')'||i==']'||i=='}')//如果字符是右括号
                    if(!sc.empty() && sc.top()==i)//且栈不为空,且栈顶元素与当前右括号相同
                        sc.pop();//移除栈顶的这个右括号
                    else //如果栈为空,遇到了右括号必死无疑;或者栈顶元素与当前右括号不同,说明当前右括号无法在栈中找到合适的匹配
                        return false; 
                else
                    switch(i){//看这个字符是否是以下3种情况中的一种
                        case('(')://如果字符是左括号
                            sc.push(')');//那么把它的相对应的右括号存入栈中,下同
                            break;
                        case('['):
                            sc.push(']');
                            break;
                        case('{'):
                            sc.push('}');
                            break;
                        }  
            }
            return sc.empty();//全部字符串已经遍历完,如果这时栈为空,说明全部得以匹配
        }
    };
    
  • 相关阅读:
    【2019-11-22】组件与模板 -- 显示数据
    【2020-01-22】模块
    【2020-01-21】迭代器和生成器
    【2020-01-17】高级类型
    【2020-01-08】类和对象
    【2019-01-07】类型和变量 + 语句
    【2020-01-07】C#语言元素
    【2020-01-07】C# 基本概念
    【2020-01-05】C#程序内部
    时间就是这样一点一点的度过的
  • 原文地址:https://www.cnblogs.com/dindin1995/p/13059118.html
Copyright © 2020-2023  润新知