在Python中检查所有列出的交付操作是否有效的程序
假设我们有一个名为orders的字符串列表。orders列表中的每个元素都以“P”或“D”开头。“P”表示已捡起,“D”表示“交付”。这些字母后面跟着订单编号。例如,“P6”表示捡起订单6。根据以下规则,我们必须检查订单列表是否有效−
- 我们不能在取货前交付订单
- 每个取货必须交付
- 已经被拾起且已交付的订单不能再次被拾起或交付
因此,如果输入为orders = [“P1”, “D1”, “P2”, “P3”, “D3”, “D2”],则输出将为True,因为第一个订单在拾起后被交付,对于第二个和第三个订单,它们一次被拾起并最终也被交付。
要解决此问题,我们将按照以下步骤执行−
- a:=新映射
- 如果orders有任何重复条目,则
- 返回False
- 对于orders中的每个i,执行以下步骤−
- 如果i以“P”开头,则
- a[pick up order number] = 1
- 否则,当i以“D”开头时,则
- 如果订单编号不在a中,则
- 返回False
- 否则,
- a[delivery order number]减1
- 如果i以“P”开头,则
- 当a的所有值列表中的所有元素之和相同时返回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