题解
数据结构
典型的堆栈。应该还是比较经典的
先放入一个字符,然后和下一个比较是否成对,成对的话之前的弹出,没成对的话这个也放入堆栈。
需要注意的是
1.可以进行一个先行判断 可以判断字符串的长度是否是偶数,是奇数的话直接return false
2.还有注意一开始堆栈为空的情况,那么需要判断是否为空,为空的话先放进去一个,要不然也没有办法进行匹配。
代码
class Solution {
public:
bool isValid(string s) {
//暴力堆栈,谁让这里就给了三种形式呢,呵呵
int n = s.length();
if(n%2 != 0){
return false;
}
stack<char>st;
for(int i = 0; i < n; i++){
if(s[i] == '('|| s[i] =='{'|| s[i] == '['){
st.push(s[i]);
}else if(!st.empty())
{
if(s[i] == ')'){
if(st.top() =='('){
st.pop();
}else{
st.push(s[i]);
}
}else if(s[i] == '}'){
if(st.top() == '{')
st.pop();
else{
st.push(s[i]);
}
}else if(s[i] == ']'){
if(st.top() =='['){
st.pop();
}else{
st.push(s[i]);
}
}
}
else st.push(s[i]);
}
return st.empty();
}
};