สมมติว่าเรามีอาร์เรย์ของ n สตริงที่เรียกว่าชื่อ เราต้องสร้างไดเร็กทอรี n ไดเร็กทอรีในระบบไฟล์เพื่อที่ในนาทีที่ ith เราจะสร้างไดเร็กทอรีที่มีชื่อ name[i] ไฟล์สองไฟล์ไม่สามารถมีชื่อเดียวกันได้ หากเราป้อนชื่อไดเร็กทอรีที่ซ้ำกัน ระบบจะมีส่วนต่อท้ายชื่อของมันในรูปแบบของ (k) ในที่นี้ k เป็นจำนวนเต็มบวกที่เล็กที่สุดเพื่อให้ชื่อที่ได้รับยังคงไม่ซ้ำกัน เราต้องหาอาร์เรย์ของสตริงที่มีความยาว n โดยที่ ans[i] คือชื่อจริงที่จะถูกกำหนดให้กับไดเร็กทอรี ith เมื่อเราสร้างมันขึ้นมา
ดังนั้น หากอินพุตเป็นเหมือนชื่อ =["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 ครั้ง จึงมีการเพิ่มหนึ่ง (1) ตัวต่อจากอันแรก
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
dic :=แผนที่ใหม่ หากไม่มีคีย์บางตัว ให้คืนค่า 0
-
res :=รายการใหม่
-
สำหรับแต่ละชื่อในชื่อ ทำ
-
ถ้าชื่อไม่อยู่ใน dic แล้ว
-
dic[ชื่อ] :=dic[ชื่อ] + 1
-
ใส่ชื่อต่อท้าย res
-
-
มิฉะนั้น
-
newname :=name concatenate '(' concatenate dic[name] concatenate ')'
-
ในขณะที่ชื่อใหม่มีอยู่ใน dic ให้ทำ
-
dic[ชื่อ] :=dic[ชื่อ] + 1
-
newname :=name concatenate '(' concatenate dic[name] concatenate ')'
-
-
dic[ชื่อใหม่] :=1
-
ใส่ชื่อใหม่ต่อท้าย 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']