思路:
按照顺序,每次从pushed里面取出一个元素,然后放入栈中
通过while循环判断在栈不为空的情况下,栈顶元素是否和popped的元素是否相等,相等则该元素出栈,且popped迭代器指向下一个元素
示例1中:1、2、3、4入栈后,栈顶元素是4,popped第一个元素是4,那么popped的迭代器指向后一个5,栈顶元素执行pop操作后变为3,while循环终止,然后5入栈,此时再次进入while循环,这个时候栈顶元素和popped的迭代器指向元素相同,以此类推,如果符合条件,那么最终栈刚好为空
#include<iostream>
#include<stack>
#include<vector>
using namespace std;
class Solution
{
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped)
{
stack<int> pushStack;
vector<int>::iterator ipush=pushed.begin(),ipop=popped.begin();
for(; ipush!=pushed.end(); ipush++)
{
pushStack.push(*ipush);
while(!pushStack.empty() && pushStack.top()==*ipop)
{
pushStack.pop();
*ipop++;
if(ipop==popped.end())
break;
}
}
if(pushStack.empty())
return true;
else
return false;
}
};
int main()
{
Solution s;
vector<int> pushed,popped;
pushed.push_back(1);
pushed.push_back(0);
// pushed.push_back(2);
// pushed.push_back(3);
// pushed.push_back(4);
// pushed.push_back(5);
// popped.push_back(4);
// popped.push_back(5);
// popped.push_back(3);
popped.push_back(2);
popped.push_back(1);
popped.push_back(0);
// popped.push_back(2);
if(s.validateStackSequences(pushed,popped))
cout<<"TRUE"<<endl;
else
cout<<"FALSE"<<endl;
return 0;
}