zoukankan      html  css  js  c++  java
  • 20. 有效的括号

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

      

    这个题目蛮有意思的,在做这个题目之前对stack(栈)的使用很少,具有先入后出的特性,如果配对是正确的,每一个右括号都要有一个左括号和它对应,左括号应该存在栈顶,使用了一个unordered_map来存储括号的配对,key是右括号,值是对应类型的左括号,遇到左括号就放在栈里,如果是右括号就应该在map中,栈为空或者栈的top不是右括号对应的左括号配对就是错误的,返回false,最终如果栈空了就反回true,具体代码如下

    class Solution {
    public:
        bool isValid(string s) {
            if (s.empty()) {
                return true;
            }
    
            unordered_map<char, char> pairs = {{')', '('},
                                              {']', '['},
                                              {'}', '{'}};
    
            if (s.size() % 2 != 0) {
                return false;
            }
    
            stack<char> stk;
    
            for (auto c : s) {
                if (pairs.count(c) == 1) {
                    if (stk.empty() || stk.top() != pairs[c]) {
                        return false;
                    }
                    stk.pop();
                }
                else {
                    stk.push(c);
                }
            }
    
            return stk.empty();
        }
    };
    

      

  • 相关阅读:
    枚举8项素数和环
    登录过滤器
    线程调度
    回溯素数环
    centos 6.5 samba简单配置
    区间k大数查询
    Centos安装arm-linux-gcc等交叉工具链
    centos7安装tftp服务器
    八皇后问题
    输出1——n的排列(深度优先搜索)
  • 原文地址:https://www.cnblogs.com/rulin/p/14028152.html
Copyright © 2011-2022 走看看