用于检查给定的推送弹出序列是否正确的程序

假设我们有一个称为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