the second one in Weekly Contest 194.
Difficulty : Medium
Related Topics : String、HashTable
Given an array of strings
names
of sizen
. You will createn
folders in your file system such that, at the ith minute, you will create a folder with the namenames[i]
.Since two files cannot have the same name, if you enter a folder name which is previously used, the system will have a suffix addition to its name in the form of
(k)
, where, k is the smallest positive integer such that the obtained name remains unique.Return an array of strings of length
n
whereans[i]
is the actual name the system will assign to theith
folder when you create it.Input: names = ["pes","fifa","gta","pes(2019)"] Output: ["pes","fifa","gta","pes(2019)"] Explanation: Let's see how the file system creates folder names: "pes" --> not assigned before, remains "pes" "fifa" --> not assigned before, remains "fifa" "gta" --> not assigned before, remains "gta" "pes(2019)" --> not assigned before, remains "pes(2019)"
Input: names = ["gta","gta(1)","gta","avalon"] Output: ["gta","gta(1)","gta(2)","avalon"] Explanation: Let's see how the file system creates folder names: "gta" --> not assigned before, remains "gta" "gta(1)" --> not assigned before, remains "gta(1)" "gta" --> the name is reserved, system adds (k), since "gta(1)" is also reserved, systems put k = 2. it becomes "gta(2)" "avalon" --> not assigned before, remains "avalon"
Input: names = ["onepiece","onepiece(1)","onepiece(2)","onepiece(3)","onepiece"] Output: ["onepiece","onepiece(1)","onepiece(2)","onepiece(3)","onepiece(4)"] Explanation: When the last folder is created, the smallest positive valid k is 4, and it becomes "onepiece(4)".
Input: names = ["wano","wano","wano","wano"] Output: ["wano","wano(1)","wano(2)","wano(3)"] Explanation: Just increase the value of k each time you create folder "wano".
Input: names = ["kaido","kaido(1)","kaido","kaido(1)"] Output: ["kaido","kaido(1)","kaido(2)","kaido(1)(1)"] Explanation: Please note that system adds the suffix (k) to current name even it contained the same suffix before.
1 <= names.length <= 5 * 10^4
1 <= names[i].length <= 20
names[i]
consists of lower case English letters, digits and/or round brackets.
- mine
- Java
Runtime: 42 ms, faster than 100.00%, Memory Usage: 56 MB, less than 100.00% of Java online submissions
// O(N)time O(N)space public String[] getFolderNames(String[] names) { String[] res = new String[names.length]; Map<String, Integer> recordCount = new HashMap<>(); for (int i = 0; i < names.length; i++) { if (recordCount.containsKey(names[i])) { int index = recordCount.get(names[i]) + 1; StringBuilder builder = new StringBuilder(); builder.append(names[i]).append("(").append(index).append(")"); String t = builder.toString(); while (recordCount.containsKey(t)) { index++; builder = new StringBuilder(); builder.append(names[i]).append("(").append(index).append(")"); t = builder.toString(); } recordCount.put(names[i], index); recordCount.put(t, 0); res[i] = t; } else { recordCount.put(names[i], 0); res[i] = names[i]; } } return res; }
- Java