假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
思路:
1.建立一个辅助栈,将栈的压入序列压入到辅助栈中
2.压入一个元素就与弹出序列进行比较,如果辅助栈顶元素与弹出序列相等就弹出
3.最后判断辅助栈元素是否被完全弹出,如果完全弹出了返回true,否则返回FALSE;
通过牛客网上的代码如下:
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV)
{
stack<int> m_data;
vector<int>::iterator iter1,iter2;
iter2=popV.begin();
if(pushV.size()==0)
return false;
for(iter1=pushV.begin();iter1!=pushV.end();iter1++)
{
m_data.push(*iter1);
while(!m_data.empty()&&m_data.top()==(*iter2))
{
m_data.pop();
iter2++;
}
}
if(m_data.empty())
return true;
return false;
}
};