美文网首页每日一练
每日一练(36):有效的括号

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

作者: 加班猿 | 来源:发表于2022-03-15 16:09 被阅读0次

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

categories:[剑指offer]

tags:[每日一练]

date: 2022/03/15


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

给定一个只包括 '(',')','{','}','[',']' 的字符串 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/problems/valid-parentheses

方法一:栈+哈希表

思路分析

  1. 有效括号字符串的长度,一定是偶数!
  2. 右括号前面,必须是相对应的左括号,才能抵消!
  3. 右括号前面,不是对应的左括号,那么该字符串,一定不是有效的括号!
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();
}

相关文章

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

    title: 每日一练(36):有效的括号 categories:[剑指offer] tags:[每日一练] da...

  • 每日一练(44):有效的字母异位词

    title: 每日一练(44):有效的字母异位词 categories:[剑指offer] tags:[每日一练]...

  • 每日一练36

    2018年8月28日,下午,坐在火车上,看着窗户外面的风景,感慨了一番,拍个照片还离不开美颜!看着自己越来越老的容...

  • 回溯算法和深度优先搜索(二)

    先看一道题目: 括号生成。 输入一个整数 ,罗列出所有有效的括号组合。有效的括号组合是指 左括号开始,右括号结束,...

  • 括号生成 (有效括号)

    题目 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例: 输入...

  • 每日一练(10):删除链表的节点

    title: 每日一练(10):删除链表的节点 categories:[剑指offer] tags:[每日一练] ...

  • 有效括号

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

  • 有效括号

    import java.util.*; /** 给定一个只包括 '(',')','{','}','[',']' 的...

  • 有效括号

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

  • 每日一练(42):Excel表序号

    title: 每日一练(42):Excel表序号 categories:[剑指offer] tags:[每日一练]...

网友评论

    本文标题:每日一练(36):有效的括号

    本文链接:https://www.haomeiwen.com/subject/issydrtx.html