今天的学习重点是
栈!
主要的话就是:
关于C++STL库里栈函数stack的使用
20. 有效的括号
(1)题目描述
题目链接如下:
力扣20. 有效的括号http://leetcode.cn/problems/valid-parentheses/description/
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
-
左括号必须用相同类型的右括号闭合。
-
左括号必须以正确的顺序闭合。
-
每个右括号都有一个对应的相同类型的左括号。
示例 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;
}
};
二、总结及计划
今天虽然写了一道题
但是自己错的次数太多了
后期也是查阅了一下资料
把自己的不足弥补一下