1.将pushV中元素与popV中元素进行比较;
2.pushV元素用下标i进行遍历,popV元素用out_index进行遍历;
3.如果下标元素不同,将pushV中元素放入栈中并使i加1,popV元素下标不变;
4.如果下标元素相同,开始清除栈中元素,并使popV下标out_index加1;
5.如果遍历完pushV元素之后,栈中元素不为空,则不合法,否则合法。
#include<vector>
#include<stack>
template <typename T>
bool IsPopOrder(std::vector<T> pushV, std::vector<T> popV) {
std::stack<T> stack;
size_t out_index = 0;
for (size_t i = 0; i < pushV.size(); i++)
{
if (pushV[i] != popV[out_index]) {
stack.push(pushV[i]);
}
else{
out_index++;
while (!stack.empty()){
if (stack.top() == popV[out_index]){
stack.pop();
out_index++;
}
else
break;
}
}
}
if (stack.empty())
return true;
return false;
}