码迷,mamicode.com
首页 > 其他好文 > 详细

20. 有效的括号

时间:2020-11-27 11:08:22      阅读:7      评论:0      收藏:0      [点我收藏+]

标签:必须   注意   size   特性   for   return   使用   ||   nbsp   

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

有效字符串需满足:

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

  

这个题目蛮有意思的,在做这个题目之前对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();
    }
};

  

20. 有效的括号

标签:必须   注意   size   特性   for   return   使用   ||   nbsp   

原文地址:https://www.cnblogs.com/rulin/p/14028152.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!