栈的压入、弹出顺序

《剑指offer 面试题22 》

模拟题,模拟判断一个弹出序列是否可能是一个压栈序列的弹出序列

bool valid(vector<int> pushS,  vector<int> popS)
{
	assert(pushS.size() == popS.size());
	int len = pushS.size();
	if(len == 0) return true;
	
	stack<int> mys;
	int cur = 0;
	for(int i = 0; i < len ; ++i)
	{
	    if(pushS[i] == popS[cur]){
	        cur++;
			continue;
		}else if( !mys.empty() && mys.top() == popS[i] ){
			cur++;
			mys.pop();
			i--;
		}else {
			mys.push(pushS[i]);
		}
	}
	
	for(; cur < len ; ++cur)
	{
		if(mys.empty()) return false;
		if(mys.top() != popS[cur]) return false;
		mys.pop();
	}
	
    return true;
}

  

原文地址:https://www.cnblogs.com/graph/p/3321871.html