이름이라는 n개의 문자열 배열이 있다고 가정합니다. i번째 분에 이름이 [i]인 디렉토리를 생성할 수 있도록 파일 시스템에 n개의 디렉토리를 만들어야 합니다. 두 파일은 같은 이름을 가질 수 없습니다. 중복 디렉토리 이름을 입력하면 시스템은 (k) 형식으로 이름에 접미사를 추가합니다. 여기서 k는 얻은 이름이 고유하게 유지되도록 하는 가장 작은 양의 정수입니다. 길이가 n인 문자열 배열을 찾아야 합니다. 여기서 ans[i]는 생성할 때 i번째 디렉토리에 할당할 실제 이름입니다.
따라서 입력이 이름 =["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을 반환
-
res :=새 목록
-
이름의 각 이름에 대해 수행
-
이름이 dic에 없으면
-
딕[이름] :=딕[이름] + 1
-
res의 끝에 이름 삽입
-
-
그렇지 않으면
-
newname :=이름 연결 '(' 연결 dic[이름] 연결 ')'
-
newname이 dic에 있는 동안 do
-
딕[이름] :=딕[이름] + 1
-
newname :=이름 연결 '(' 연결 dic[이름] 연결 ')'
-
-
dic[새 이름] :=1
-
res의 끝에 newname 삽입
-
-
-
반환 해상도
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
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']