Cho danh sách orders, mỗi phần tử bắt đầu bằng 'P' (lấy hàng) hoặc 'D' (giao hàng) theo sau ID đơn hàng. Kiểm tra tính hợp lệ:
- Không giao trước khi lấy
- Mọi đơn lấy phải được giao
- Không lấy/giao trùng lặp đơn đã hoàn tất
Ví dụ: orders=["P1","D1","P2","P3","D3","D2"] → True.
Giải thuật (Theo dõi trạng thái đơn hàng)
- Kiểm tra trùng lặp trong
orders - Duyệt
orders:'P': đánh dấu đơn hàng = 1 (đã lấy, chưa giao)'D': nếu đơn chưa lấy → False; nếu đã lấy → giảm trạng thái về 0
- Cuối cùng: tất cả trạng thái phải = 0
Ví dụ triển khai
def solve(orders):
status = {}
if len(set(orders)) != len(orders):
return False
for order in orders:
if order[0] == "P":
status[order[1:]] = 1
elif order[0] == "D":
if order[1:] not in status:
return False
status[order[1:]] -= 1
return sum(status.values()) == 0
print(solve(["P1", "D1", "P2", "P3", "D3", "D2"]))
Đầu vào
["P1", "D1", "P2", "P3", "D3", "D2"]
Đầu ra
True