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();
    }
};
原文地址:https://www.cnblogs.com/MagicConch/p/12179150.html