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

開始您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.