• LeetCode(C++)刷题计划:20-有效的括号


    20-有效的括号

    @Author:CSU张扬
    @Email:csuzhangyang@gmail.com or csuzhangyang@qq.com

    Category Difficulty Pass rate Tags Companies
    algorithms Easy 39.88% string / stack airbnb / amazon / bloomberg / facebook / google / microsoft / twitter / zenefits

    1. 题目

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

    有效字符串需满足:

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

    注意空字符串可被认为是有效字符串。

    示例 1:
    输入: "()"
    输出: true
    
    示例 2:
    输入: "()[]{}"
    输出: true
    
    示例 3:
    输入: "(]"
    输出: false
    
    示例 4:
    输入: "([)]"
    输出: false
    
    示例 5:
    输入: "{[]}"
    输出: true
    

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/valid-parentheses/

    2. 解法

    1. 通过栈来解决。
    2. 遇见左括号就压入栈中,遇见右括号,则判断当前栈顶元素是否是对应的左括号。若是,则将该左括号出栈;若不是,则返回 false
    3. 最后根据栈是否为空来判断括号是否有效,栈为空则有效。

    执行用时: 4 ms, 在所有 cpp 提交中击败了75.87%的用户
    内存消耗: 8.6 MB, 在所有 cpp 提交中击败了71.46%的用户

    class Solution {
    public:
        bool isValid(string s) {
            stack<char> st;
            map<char, char> m = { {'(', ')'}, {'[', ']'}, {'{', '}'} };
            for (auto c : s) {
                if (!st.empty() && m[st.top()] == c) {
                    st.pop();
                } else if (m[c] == 0) { // m[c] == 0即:是右括号的情况
                    return false;
                }else {
                    st.push(c);
                }
            }
            return st.empty();
        }
    };
    
  • 相关阅读:
    7. JavaScript学习笔记——DOM
    6. Javscript学习笔记——BOM
    3. Javascript学习笔记——变量、内存、作用域
    2. Javscript学习笔记——引用类型
    1. JavaScript学习笔记——JS基础
    计算机网络学习笔记——网络层
    python小数据池,代码块知识
    pycharm快捷键
    字典
    04
  • 原文地址:https://www.cnblogs.com/MagicConch/p/12179150.html
Copyright © 2020-2023  润新知