leetcode:20. 有效的括号

题目来源

题目描述

在这里插入图片描述

class Solution {
public:
    bool isValid(string s) {

    }
};

题目解析

这道题让我们验证输入的字符串是否为括号字符串,包括大括号,中括号和小括号。

这里我们使用栈。

  • 遍历输入字符串
  • 如果当前字符为左半边括号时,则将其压入栈中
  • 如果遇到右半边括号时,分类讨论:
    • 1)如栈不为空且为对应的左半边括号,则取出栈顶元素,继续循环
    • 2)若此时栈为空,则直接返回false
    • 3)若不为对应的左半边括号,反之返回false

时间复杂度O(n),空间复杂度O(n)

请添加图片描述

使用栈:空间复杂度O(N)

#include <stack>
#include <string>

using namespace std;
//
bool isValid (string s){
    if(s.empty()){
        return true;
    }
    
    if(s.length() % 2 != 0){
        return false;
    }
    
    stack<char> stack;
    for (int i = 0; i < s.size(); ++i) {
        if(s[i] == '(' || s[i] == '{' || s[i] == '['){
            stack.push(s[i]);
        }else{
            if(stack.size() == 0){
                return false;
            }
            
            char c = stack.top();
            stack.pop();
            
            char match;
            if(s[i] == ')'){
               match = '(';
            }else if(s[i] == '}'){
                match = '{';
            }else {
                match = ']';
            }
            
            if(c != match){
                return false;
            }
        }
    }

    return stack.empty();
}
  • 时间复杂度:O(n),因为我们一次只遍历给定的字符串中的一个字符并在栈上进行 O(1)O(1) 的推入和弹出操作。
  • 空间复杂度:O(n),当我们将所有的开括号都推到栈上时以及在最糟糕的情况下,我们最终要把所有括号推到栈上。例如 ((((((((((
    在这里插入图片描述

类似题目

题目核心思路
leetcode:20. 有效的括号 Valid Parentheses
leetcode:1003. 检查替换后的词是否有效 Check If Word Is Valid After Substitutions
leetcode:678. 有效的括号字符串(包含(或者)和*三种字符)Valid Parenthesis String
leetcode:761. 特殊的二进制序列 Special Binary String
leetcode:856. 括号的分数 Score of Parentheses
leetcode:22. 给定n,生成所有合法的括号组合 generate-parentheses回溯
leetcode:301. 删除无效的括号,得到所有有效的不重复组合 Remove Invalid Parentheses递归
leetcode:32. 最长有效括号 Longest Valid Parentheses动态规划(依赖之前的答案)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值