题解 | #栈的压入、弹出序列#

栈的压入、弹出序列

http://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106

class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        if(pushV.size() == 0 || popV.size() == 0) return false;
        int popVPos = 0;
        int pushVPos = 0;
        stack<int> st;
        /* 
        当押入 vector 并且弹出 vector 还有内容时循环继续,
        stack 中不断压入 pushVec 的元素,直到遇到 popVec 的元素
        不断弹出 popVec 的元素,直到 stack 中的 top 元素不再和 popVec 相同
        重复上述循环
        如果结束时 stack 中还有内容表示 否
        */
        while(pushVPos < pushV.size() && popVPos < popV.size()) {
            if(pushVPos < pushV.size()) {
                int pushVal = pushV[pushVPos];
                st.push(pushVal);
                pushVPos++;
            }
            
            
            while(st.size() && st.top() == popV[popVPos]) {
                st.pop();
                popVPos++;
            }
        }
        if(st.size()) return false;
        return true;
    }
};
全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务