สมมติว่าเรามีอาร์เรย์สตริง names ขนาด n เราจะสร้างโฟลเดอร์ n อัน โดยนาทีที่ i จะสร้างโฟลเดอร์ชื่อ names[i] ไม่สามารถมีชื่อซ้ำกันได้ ถ้าชื่อซ้ำระบบจะเติม suffix (k) โดย k เป็นจำนวนเต็มบวกน้อยที่สุดที่ทำให้ชื่อไม่ซ้ำ เราต้องคืนอาร์เรย์ชื่อจริงที่จะถูกกำหนด
เช่น ถ้าข้อมูลเข้าเป็น names = ["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"] ผลลัพธ์จะเป็น ['my_dir', 'my_dir(1)', 'my_new_dir', 'my_new_dir(1)', 'abc'] เพราะ "my_new_dir" ซ้ำ จึงเติม (1) หลังตัวแรก
ขั้นตอนการแก้ปัญหา
- dic = defaultdict(int) (ถ้า key ไม่มีให้คืน 0)
- res = []
- วนลูปแต่ละ name ใน names:
- ถ้า name ไม่อยู่ใน dic:
- dic[name] += 1
- เพิ่ม name เข้า res
- มิฉะนั้น:
- newname = name + '(' + str(dic[name]) + ')'
- while newname อยู่ใน dic:
- dic[name] += 1
- newname = name + '(' + str(dic[name]) + ')'
- dic[newname] = 1
- เพิ่ม newname เข้า res
- ถ้า name ไม่อยู่ใน dic:
- คืนค่า res
ตัวอย่างโค้ด
from collections import defaultdict
def solve(names):
dic = defaultdict(int)
res = []
for name in names:
if name not in dic:
dic[name] += 1
res.append(name)
else:
newname = name + '(' + str(dic[name]) + ')'
while newname in dic:
dic[name] += 1
newname = name + '(' + str(dic[name]) + ')'
dic[newname] = 1
res.append(newname)
return res
names = ["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"]
print(solve(names))
ข้อมูลเข้า
["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"]
ข้อมูลออก
['my_dir', 'my_dir(1)', 'my_new_dir', 'my_new_dir(1)', 'abc']