zoukankan      html  css  js  c++  java
  • 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();
        }
    };
    
  • 相关阅读:
    新版Unity的一些小玩意儿
    Three.js踩坑笔记
    Unity 接入腾讯云COS对象存储
    通过贝塞尔曲线编辑曲线
    利用ZXing.Net生成和识别二维码
    开源免费的安卓投屏工具-Scrcpy
    Unity Reflection Probe使用入门
    Unity VFX踩坑
    windows上通过自定义后缀文件启动Unity应用
    应用于Oculus Quest的VR头显应用
  • 原文地址:https://www.cnblogs.com/MagicConch/p/12179150.html
Copyright © 2011-2022 走看看