#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param pushV int整型一维数组 
# @param popV int整型一维数组 
# @return bool布尔型
#
class Solution:
    def IsPopOrder(self, pushV: List[int], popV: List[int]) -> bool:
        stack = []
        push_index = 0
        pop_index = 0
        
        while push_index < len(pushV) or stack:
            # 如果栈顶元素不匹配 popV 当前元素,并且还有元素可以压入栈中
            if (not stack or stack[-1] != popV[pop_index]) and push_index < len(pushV):
                stack.append(pushV[push_index])
                push_index += 1
            elif stack and stack[-1] == popV[pop_index]:
                stack.pop()
                pop_index += 1
            else:
                # 如果栈顶元素不匹配且没有更多元素可以压入栈中,返回 False
                return False
        
        # 确保栈为空且 popV 完全匹配
        return not stack and pop_index == len(popV)