题意:
条件:给出一个栈的输入序列和一个输出序列
问题:你判断输出序列是否合法,即通过输入序列的入栈顺序能否通过出栈操作得到输出序列。
思路:
设计一个栈,进行模拟和判断。
判断思路是先按照入栈顺序每次放入一个元素(for循环),然后开始检查当前是否可以出栈,只要满足出栈条件就出栈,直到不满足出栈条件(while循环)
可以出栈的条件为:
- 出栈索引合法
(防止数组越界) - 栈不为空
(因为是在while循环里,可能栈会出空,若没有2直接判断3会数组越界) - 栈的当前元素与输出序列相等
(真正意义上的判断能否出栈,前2个条件是为了保证3的操作合法)
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
int n=pushV.size();
if(n!=popV.size())
return false;
int idxIn=0,idxOut=0;
stack<int> st;
for(;idxIn<n;idxIn++){
st.push(pushV[idxIn]);
while(idxOut<n && !popV.empty() && st.top()==popV[idxOut]){
st.pop();
idxOut++;
}
}
if(idxOut==n)
return true;
return false;
}
};
网友评论