判断出栈序列是否合理问题,看了半天,栈的问题还是用另一个栈解决比较方便,原因就是性质是一样的。
在这个问题中,知道了入栈序列和出栈序列,那么我们用一个栈模拟入栈,用出栈序列约束其出栈元素。
(1):将入栈序列中元素压入栈
(2):判断栈顶元素是否等于出栈元素,等于即将其pop(),出栈序列加一,重复判断
(3):循环(1)(2),直到入栈序列所有元素被遍历
(4):判断栈是否为空,若为空,则意味着出栈序列合理的,否则,不合理
代码:
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
stack<int> st;
int l = pushV.size();
int pushind = 0,popind = 0;
while(pushind < l){
st.push(pushV[pushind]);
while(!st.empty() & st.top() == popV[popind]){
st.pop();
popind++;
}
pushind++;
}
if(st.empty())
return true;
else
return false;
}
};
京公网安备 11010502036488号