मान लीजिए कि हमारे पास नाम नामक n स्ट्रिंग्स की एक सरणी है। हमें फाइल सिस्टम में n निर्देशिकाएं बनानी होंगी जैसे कि, ith मिनट में, हम नाम के साथ एक निर्देशिका बनाएंगे [i]। दो फाइलों का एक ही नाम नहीं हो सकता है, यदि हम एक डुप्लिकेट निर्देशिका नाम दर्ज करते हैं तो सिस्टम के नाम के साथ (के) के रूप में एक प्रत्यय जोड़ा जाएगा, यहां, के सबसे छोटा सकारात्मक पूर्णांक है, जिससे प्राप्त नाम अद्वितीय रहता है। हमें लंबाई 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) जोड़ा जाता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
dic :=एक नया नक्शा, अगर कोई कुंजी मौजूद नहीं है तो 0
-
रेस :=एक नई सूची
-
नामों में प्रत्येक नाम के लिए, करें
-
अगर नाम dic में नहीं है, तो
-
डीआईसी [नाम]:=डीआईसी [नाम] + 1
-
रेस के अंत में नाम डालें
-
-
अन्यथा,
-
नया नाम:=नाम संक्षिप्त करें '(' concatenate dic [name] concatenate ')'
-
जबकि नया नाम dic में मौजूद है, करें
-
डीआईसी [नाम]:=डीआईसी [नाम] + 1
-
नया नाम:=नाम संक्षिप्त करें '(' concatenate dic [name] concatenate ')'
-
-
डीआईसी [नया नाम] :=1
-
रेस के अंत में नया नाम डालें
-
-
-
रिटर्न रेस
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
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']