Python程序用于检查所有列出的送货操作是否有效


假设我们有一个名为orders的字符串列表。orders列表中的每个元素都以“P”或“D”开头。“P”表示取货,“D”表示送货。这些字母后面跟着订单ID号。例如,“P6”表示取货订单6。我们必须根据以下规则检查orders列表是否有效:

  • 在取货之前不能送货
  • 每次取货都必须送货
  • 已经取货并送达的订单不能再次取货或送货

因此,如果输入类似于orders = ["P1", "D1", "P2", "P3", "D3", "D2"],则输出将为True,因为第一个订单在取货后送达,而对于第二个和第三个订单,它们同时取货,最终也送达。

为了解决这个问题,我们将遵循以下步骤:

  • a := 一个新的映射
  • 如果orders包含任何重复项,则
    • 返回False
  • 对于orders中的每个i,执行以下操作:
    • 如果i以“P”开头,则
      • a[取货订单号] = 1
    • 否则,如果i以“D”开头,则
      • 如果订单号不在a中,则
        • 返回False
      • 否则,
        • a[送货订单号]减1
  • 如果a的所有值的列表中所有元素的总和等于0,则返回true,否则返回false

示例

让我们看看下面的实现,以便更好地理解:

def solve(orders):
   a = {}
   if len(set(orders)) != len(orders):
      return False
   for i in orders:
      if i[0] == "P":
         a[i[1:]] = 1
      elif i[0] == "D":
         if i[1:] not in a:
            return False
         else:
            a[i[1:]] -= 1
   return sum(a.values()) == 0

orders = ["P1", "D1", "P2", "P3", "D3", "D2"]
print(solve(orders))

输入

["P1", "D1", "P2", "P3", "D3", "D2"]

输出

True

更新于:2021年10月14日

浏览量:137

开始您的职业生涯

完成课程获得认证

开始学习
广告