每日一练(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();
}
目录
相关文章
|
6月前
|
Java Go C++
Rust每日一练(Leetday0017) 字母异位词分组、幂函数、N皇后
Rust每日一练(Leetday0017) 字母异位词分组、幂函数、N皇后
46 1
Rust每日一练(Leetday0017) 字母异位词分组、幂函数、N皇后
|
6月前
|
C++ Python Java
Python每日一练(20230422) 杨辉三角、最长回文子串、逆波兰表达式求值
Python每日一练(20230422) 杨辉三角、最长回文子串、逆波兰表达式求值
31 0
Python每日一练(20230422) 杨辉三角、最长回文子串、逆波兰表达式求值
|
6月前
|
算法
面试题 08.09:括号
面试题 08.09:括号
27 0
|
Rust
Rust每日一练(Leetday0007) 删除结点、有效括号、合并链表
Rust每日一练(Leetday0007) 删除结点、有效括号、合并链表
119 0
|
算法 C语言 C++
【C语言蓝桥杯每日一题】—— 数列求值
哈喽各位友友们😊,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!😘我仅已此文,和大家分享【C语言蓝桥杯每日一题】—— 数列求值~ 都是精华内容,可不要错过哟!!!😍😍😍
78 0
|
算法 C语言 C++
【C语言蓝桥杯每日一题】——排列字母
哈喽各位友友们😊,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!😘我仅已此文,和大家分享【C语言蓝桥杯每日一题】——排列字母~ 都是精华内容,可不要错过哟!!!😍😍😍
145 0
|
存储
【刷题】有效的括号
【刷题】有效的括号
【刷题】有效的括号
|
存储 Java Python
LeetCode每日一题-7:有效的括号
LeetCode每日一题-7:有效的括号
LeetCode每日一题——921. 使括号有效的最少添加
只有满足下面几点之一,括号字符串才是有效的:
104 0