检验入栈序列、出栈序列是否合法

题目:元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1),则合法。入栈的序列(1,2,3,4,5),出栈序列为(4,5,2,3,1),则不合法。 

思路:借用一个辅助栈,先按照入栈顺序push,直到栈顶元素和出栈序列相等就pop,以此类推,最后栈为空且两个序列都被遍历到。

bool Ispoporder(vector<int>&PushV,vector<int>&PopV)
{
    stack<int> s;
    int lpush=PushV.size(),lpop=PopV.size();
    if(PushV.empty() || PopV.empty() || lpush!=lpop)
        return false;
    int j=0;
    for(int i=0;i<lpush;i++)
    {
        while(!s.empty() && s.top()==PopV[j])
        {
            s.pop();
            j++;
        }
        s.push(PushV[i]);
    }
    if(j<lpop)
    {
        while(!s.empty() && s.top()==PopV[j])
        {
            s.pop();
            j++;
        }
    }
    if(s.empty())
        return true;
    else
        return false;
}

猜你喜欢

转载自www.cnblogs.com/mini-coconut/p/9288952.html
今日推荐