每日一练(36):有效的括号

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

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

有效字符串需满足:


左括号必须用相同类型的右括号闭合。


左括号必须以正确的顺序闭合。


示例 1:


输入:s = "()"

输出:true


示例 2:


输入:s = "()[]{}"

输出:true


示例 3:


输入:s = "(]"

输出:false


示例 4:


输入:s = "([)]"

输出:false


示例 5:


输入:s = "{[]}"

输出:true


提示:


1 <= s.length <= 104


s 仅由括号 '()[]{}' 组成


来源:力扣(LeetCode)


链接:https://leetcode-cn.com/probl...


方法一:栈+哈希表


思路分析


  1. 有效括号字符串的长度,一定是偶数!


  1. 右括号前面,必须是相对应的左括号,才能抵消!


  1. 右括号前面,不是对应的左括号,那么该字符串,一定不是有效的括号!


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


方法二:栈


bool isValid(string s) {
    if (s.size() % 2) {
        return false;
    }
    stack<char> st;
    for (auto ss : s) {
        if (ss == '(') {
            st.push(')');
        } else if (ss == '[') {
            st.push(']');
        } else if (ss == '{') {
            st.push('}');
        } else {
            if (st.empty() || st.top() != ss) {
                return false;
            } else {
                st.pop();
            }
        }
    }
    return st.empty();
}
目录
相关文章
|
1月前
|
算法 C++
Leetcode第二十二题(括号生成)
这篇文章讨论了如何使用递归算法解决LeetCode第22题“括号生成”的问题,提供了两种C++的实现方法,目的是生成所有有效的括号组合。
16 0
Leetcode第二十二题(括号生成)
|
6月前
栈刷题记(一-有效的括号)
栈刷题记(一-有效的括号)
栈刷题记(一-有效的括号)
|
6月前
|
Java Go C++
Rust每日一练(Leetday0017) 字母异位词分组、幂函数、N皇后
Rust每日一练(Leetday0017) 字母异位词分组、幂函数、N皇后
45 1
Rust每日一练(Leetday0017) 字母异位词分组、幂函数、N皇后
|
6月前
|
C++ Python Java
Python每日一练(20230422) 杨辉三角、最长回文子串、逆波兰表达式求值
Python每日一练(20230422) 杨辉三角、最长回文子串、逆波兰表达式求值
31 0
Python每日一练(20230422) 杨辉三角、最长回文子串、逆波兰表达式求值
|
6月前
|
算法
面试题 08.09:括号
面试题 08.09:括号
26 0
|
Rust
Rust每日一练(Leetday0007) 删除结点、有效括号、合并链表
Rust每日一练(Leetday0007) 删除结点、有效括号、合并链表
119 0
|
算法 C语言
C语言每日一练——第1天:倒置字符串
C语言每日一练——第1天:倒置字符串
156 0
C语言每日一练——第1天:倒置字符串
|
存储
【刷题】有效的括号
【刷题】有效的括号
【刷题】有效的括号
|
存储 Java Python
LeetCode每日一题-7:有效的括号
LeetCode每日一题-7:有效的括号