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

pythonserver side programmingprogramming更新于 2026/1/5 18:52:17

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

  • 我们不能在取货前交付订单
  • 每次取货都必须交付
  • 已经取货并交付的订单不能再次取货或交付

因此,如果输入为 orders = ["P1", "D1", "P2", "P3", "D3", "D2"],则输出将为 True,因为第一个订单在取货后交付,而对于第二和第三个订单,它们将立即取货并最终交付。

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

  • a := a new map
  • 如果订单有任何重复条目,则
    • 返回 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

相关文章


有用资源