1.输入两个序列,其中一个序列表示栈的push(入)序列,判断另一个序列有没有可能是对应的pop(出)序列
class Stack:
def __init__(self):
self.item = []
def empty(self):
return len(self.item) == 0
def size(self):
return len(self.item)
#返回栈顶元素
def peek(self):
if not self.empty():
return self.item[-1]
else:
return None
def pop(self):
if len(self.item) > 0:
return self.item.pop()
else:
return None
def push(self,value):
self.item.append(value)
def isPopSerial(push,pop):
if push == None or pop == None:
return False
pushLen = len(push)
popLen = len(pop)
if pushLen != popLen:
return False
pushIndex = 0
popIndex = 0
stack = Stack()
while pushIndex < pushLen:
stack.push(push[pushIndex])
pushIndex += 1
while (not stack.empty()) and stack.peek() == pop[popIndex]:
stack.pop()
popIndex +=1
return stack.empty() and popIndex == popLen
if __name__ == '__main__':
push = [1,2,3,4,5]
pop = [3,2,5,4,1]
if isPopSerial(push,pop):
print('yes')
else:
print('no')
3.上面这种方法在一个合理的pop序列的时候需要操作的次数最多,即把push序列进行一次压栈和出栈操作,操作次数为2N,因此,时间复杂度为O(N),此外,这种方法使用了额外的栈空间,因此,空间复杂度为O(N)