前言
正文
1. 两个栈实现一个队列
code
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
if(stack2.size()!=0){
int tmp = stack2.front();
stack2.pop();
return tmp;
}
else{//若栈二为空了,我们就要把栈一的值全都放在栈二中去
while(stack1.size()!=0){
int tmp = stack1.top();
stack1.pop();
stack2.push(tmp);
}
return pop();
}
}
private:
stack<int> stack1;
stack<int> stack2;
};
2. 有效的括号
题目
code
class Solution {
public:
bool isValid(string s) {
//基本思想就是用栈的形式,这种属于鸡蛋里挑骨头。就直接返回即可。
if(s.size()==0)
return false;
stack<char> st;
char str;
bool flag = true;
for(int i = 0;i<s.size();i++)
{
if(s[i]=='('||s[i]=='{'||s[i]=='[')
{
st.push(s[i]);
}
else if(!st.empty())
{
str = st.top();
if(s[i]==')')
{
if(str!='(')
return false;
}
else if(s[i]==']')
{
if(str!='[')
return false;
}
else if(s[i]=='}')
{
if(str!='{')
return false;
}
st.pop();
}
else
{
return false;//error3:防止有元素不满足入栈的条件,也没有做处理
}
}
if(!st.empty())//error2:注意细节
flag = false;
return flag;
}
};