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']