假设我们有一个称为push的数字列表,另一个名为pops的数字列表,我们必须检查这是否是堆栈push和pop动作的有效序列。
因此,如果输入像pushs = [1、2、5、7、9] pops = [2、1、9、7、5],则输出将为True,因为我们可以按[1、2]首先将它们都弹出。然后按[5、7、9]并全部弹出。
为了解决这个问题,我们将遵循以下步骤-
s:=一个新堆栈
i:= 0
对于推入中的每个元素,执行
从s中删除top元素
我:=我+ 1
将ele推入s
s的大小> 0并且pops [i]是s的相同顶部元素,但是
当s的大小等于0时返回true,否则返回false
让我们看下面的实现以更好地理解-
class Solution: def solve(self, pushes, pops): s = [] i = 0 for ele in pushes: s.append(ele) while len(s) > 0 and pops[i] == s[-1]: s.pop() i += 1 return len(s) == 0 ob = Solution()pushes = [1, 2, 5, 7, 9] pops = [2, 1, 9, 7, 5] print(ob.solve(pushes, pops))
[1, 2, 5, 7, 9], [2, 1, 9, 7, 5]
输出结果
True