Day6-leetcode20

今天的学习重点是

栈!

主要的话就是:

关于C++STL库里栈函数stack的使用

 

20. 有效的括号

(1)题目描述

题目链接如下:

力扣20. 有效的括号icon-default.png?t=M85Bhttp://​leetcode.cn/problems/valid-parentheses/description/

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。

  2. 左括号必须以正确的顺序闭合。

  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "()[]{}"
输出:true

示例 3:

输入:s = "(]"
输出:false

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

做题分析:

用自己的话解释题意:

给定一字符串,里面由'()[]{}'组成,判断字符串是否合理


开始思考解决方法:

这一题,其实非常的简单。

但是,有一些关于对栈的理解

首先栈的结构就是先进后出,类似于顶端开口的瓶子

那我们可以把字符串一次扫描进去。

如果是左括号的话。就直接入栈。

如果是右括号的话,直接判断是不是和此时栈顶元素匹配为一组括号,因为一旦不匹配,则说明该字符串不匹配。

那么先举一些特例:大家用来判断自己的程序是否正确。

{}()[]

[(){}]

(((((({}))))))

好,接下来

emmm

讲解一下我今天下午的战果为什么只有这一题。

先看图:

一堆的错误

每次查看出错信息也是出奇的一致:

其实看不大懂,但看到address感觉是地址的问题

后来我又综合了一下错的样例

初步估断是栈为空时返回值的问题

所以我们需要特别的判断一下栈的空不空的情况

后来查阅资料后发现:

采用栈实现时,当栈为空时,以为空栈调用top函数会返回NULL,然而调用时会发生段错误。

接下来的话就是

代码如下:

class Solution {
public:
    bool isValid(string s) {
        stack<char>a;
        if(s.size()%2==1)return false;
        for(int i=0;i<s.size();i++){
            
            if(s[i]=='('||s[i]=='['||s[i]=='{')a.push(s[i]);
            else if(s[i]==')'){
                if(a.empty())return false;
                else if(a.top()=='('){
                    a.pop();
                }
                else return false;
            }
            else if(s[i]==']'){
                if(a.empty())return false;
                else if(a.top()=='[')a.pop();
                else return false;
            }
            else if(s[i]=='}'){
                if(a.empty())return false;
                else if(a.top()=='{')a.pop();
                else return false;
            }
            
            else return false;
        }
        if(a.empty())return true;
        else return false; 
    }
};

二、总结及计划

今天虽然写了一道题

但是自己错的次数太多了

后期也是查阅了一下资料

把自己的不足弥补一下

接下来会更努力。

好,完美结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值