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中,则
- 如果i以“P”开头,则
- 如果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
广告