Leecode20. 有效的括号——Leecode大厂热题100道系列

Posted 来老铁干了这碗代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leecode20. 有效的括号——Leecode大厂热题100道系列相关的知识,希望对你有一定的参考价值。

我是小张同学,立志用最简洁的代码做最高效的表达


以下是我个人做的题解,每个题都尽量囊括了所有解法,并做到了最优解,欢迎大家收藏!留言!

传送门——>Leecode大厂热题100道系列题解


问题描述

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

有效字符串需满足:

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

示例 1:
输入:s = “()”
输出:true

示例 2:
输入:s = “()[]{}”
输出:true

示例 3:
输入:s = “(]”
输出:false

示例 4:
输入:s = “([)]”
输出:false

示例 5:
输入:s = “{[]}”
输出:true


核心思路

采用栈匹配的模式

false有三种情况:

  1. 左右括号匹配不一致
  2. 左括号数量大于右括号数量
  3. 左括号数量小于右括号数量

按以上三种情况依次判断即可。 可以采用hash表来进行匹配。


class Solution {
public:
    bool isValid(string s) {
        stack<char> sta;
        unordered_map<char, char>um;
        um['('] = ')';  um['['] = ']'; um['{'] = '}';

        for(auto i : s) {
            if(i == '(' || i == '[' || i == '{') {
                sta.push(i);
            } else {
                // 匹配不上 或 左括号数量小于右括号数量
                if(sta.empty() || um[sta.top()] != i) {
                    return false;
                }
                else {
                    sta.pop();
                }
            }
        }
        // 左括号数量是否大于右括号数量
        return sta.empty() ? true : false;
    }
};

以上是关于Leecode20. 有效的括号——Leecode大厂热题100道系列的主要内容,如果未能解决你的问题,请参考以下文章

Leecode22. 括号生成——Leecode大厂热题100道系列

Leecode22. 括号生成——Leecode大厂热题100道系列

Leecode 301. 删除无效的括号——Leecode每日一题系列

leecode 394. 字符串解码 java版本

leecode 394. 字符串解码 java版本

题解报告Leecode367. 有效的完全平方数——Leecode每日一题系列