Cho mảng names chứa n chuỗi. Tạo n thư mục lần lượt theo names[i]. Nếu tên bị trùng, hệ thống tự động thêm hậu tố (k) với k nhỏ nhất sao cho tên mới duy nhất. Trả về mảng tên thực tế được gán.
Ví dụ: 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"].
Thuật toán giải quyết
- Sử dụng defaultdict(int) dic để lưu số lần đã dùng tên.
- Duyệt từng name:
- Nếu name chưa có trong dic: dic[name] = 1, thêm name vào kết quả.
- Ngược lại: tạo newname = name + "(" + dic[name] + ")". Tăng dic[name] cho đến khi newname chưa có trong dic. Đặt dic[newname] = 1, thêm newname vào kết quả.
Ví dụ triển khai
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))Đầu vào
["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"]
Đầu ra
['my_dir', 'my_dir(1)', 'my_new_dir', 'my_new_dir(1)', 'abc']