JZ21 栈的压入、弹出序列
my version
错误记录
- 遇到数组下标可能越界的情况,需要把判断越界条件写在前面,比如
while push_idx < len(pushV) and pushV[push_idx] != popV[pop_idx]:
and前后顺序颠倒会出错
# -*- coding:utf-8 -*-
class Solution:
def IsPopOrder(self, pushV, popV):
if len(pushV) != len(popV):
return False
if not pushV:
return True
push_idx = 0
pop_idx = 0
stack = []
while push_idx < len(pushV):
if stack and popV[pop_idx] == stack[-1]:
stack.pop()
pop_idx += 1
else:
while push_idx < len(pushV) and pushV[push_idx] != popV[pop_idx]:
stack.append(pushV[push_idx])
push_idx += 1
if push_idx < len(pushV):
push_idx += 1
pop_idx += 1
while stack or pop_idx < len(popV):
if popV[pop_idx] == stack[-1]:
stack.pop()
pop_idx += 1
else:
return False
return True