Giả sử chúng ta có một mảng gồm n chuỗi được gọi là tên. Chúng ta phải tạo n thư mục trong hệ thống tệp sao cho đến phút thứ i, chúng ta sẽ tạo một thư mục có tên là [i]. Hai tệp không được trùng tên, nếu ta nhập tên thư mục trùng lặp thì hệ thống sẽ thêm hậu tố vào tên của nó ở dạng (k), ở đây, k là số nguyên dương nhỏ nhất sao cho tên thu được là duy nhất. Chúng ta phải tìm một mảng các chuỗi có độ dài n trong đó ans [i] là tên thực sẽ được gán cho thư mục thứ i khi chúng ta tạo nó.
Vì vậy, nếu đầu vào giống như tên =["my_dir", "my_dir (1)", "my_new_dir", "my_new_dir", "abc"], thì đầu ra sẽ là ['my_dir', 'my_dir (1)' , 'my_new_dir', 'my_new_dir (1)', 'abc'] vì "my_new_dir" đã có một lần, sau đó một (1) được thêm vào sau cái đầu tiên.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
dic:=một bản đồ mới, nếu không có khóa nào đó thì trả về 0
-
res:=một danh sách mới
-
đối với mỗi tên trong tên, thực hiện
-
nếu tên không có trong dic, thì
-
dic [name]:=dic [name] + 1
-
chèn tên vào cuối res
-
-
nếu không,
-
newname:=name concatenate '(' concatenate dic [name] concatenate ')'
-
trong khi newname hiện diện trong dic, do
-
dic [name]:=dic [name] + 1
-
newname:=name concatenate '(' concatenate dic [name] concatenate ')'
-
-
dic [newname]:=1
-
chèn tên mới vào cuối res
-
-
-
trả lại res
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
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']