Leetocode Hot 100 第20题
今天的严重错误:
内存泄漏违规读的错误提示原因:
在stack为空的情况下试图读取st.top()所以导致错误
if(st.empty() || st.top()!=’(’)
短路或的工作思路:必须先把empty先放在前面判断,两个判断条件一如果换位置就会先判断前面的内容!!!太不容易了终于被我发现了!太棒了哈哈哈哈!!!
stack类使用
#include
stack st;
st.empty();
st.pop();
st.push(char a);
st.size();
st.top()
代码改进
这是改进之前的:
class Solution {
public:
bool isValid(string s) {
stack<char> st;
if(s.length()%2!=0) return false;
for(char a:s){
if(a=='(' || a=='{' || a=='['){
st.push(a);
}else if(a == ')'){
if(st.empty() || st.top()!='('){
return false;
}else{
st.pop();
}
}else if(a == '}'){
if(st.empty() || st.top()!='{'){
return false;
}else{
st.pop();
}
}else if(a == ']'){
if(st.empty() || st.top()!='['){
return false;
}else{
st.pop();
}
}
}
return st.empty();
}
};
用map来把它写得更简练一些!
class Solution {
public:
bool isValid(string s) {
stack<char> st;
if(s.length()%2!=0) return false;
map<char,char> pairs={
{')','('},
{'}','{'},
{']','['}
};
for(char a:s){
if(a=='(' || a=='{' || a=='['){ //左括号
st.push(a);
}else{ //右括号
if(st.empty() || st.top()!= pairs[a]){
return false; //如果不匹配则返回false
}
st.pop();
}
}
return st.empty();
}
};
继续加油耶耶耶!!!