Skip to content

Commit d25460d

Browse files
Update README.md
java solution added
1 parent 385da57 commit d25460d

File tree

1 file changed

+69
-0
lines changed
  • solution/1900-1999/1948.Delete Duplicate Folders in System

1 file changed

+69
-0
lines changed

solution/1900-1999/1948.Delete Duplicate Folders in System/README.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,75 @@ tags:
135135
#### Java
136136

137137
```java
138+
class Solution {
139+
static class TrieNode {
140+
Map<String, TrieNode> children = new HashMap<>();
141+
String name;
142+
boolean isDeleted = false;
143+
144+
TrieNode(String name) {
145+
this.name = name;
146+
}
147+
}
148+
149+
Map<String, List<TrieNode>> serialMap = new HashMap<>();
150+
151+
public List<List<String>> deleteDuplicateFolder(List<List<String>> paths) {
152+
TrieNode root = new TrieNode("");
153+
154+
// Step 1: Build the folder trie
155+
for (List<String> path : paths) {
156+
TrieNode curr = root;
157+
for (String folder : path) {
158+
curr.children.putIfAbsent(folder, new TrieNode(folder));
159+
curr = curr.children.get(folder);
160+
}
161+
}
162+
163+
// Step 2: Serialize and collect duplicates
164+
serialize(root);
165+
166+
// Step 3: Mark duplicate folders
167+
for (List<TrieNode> group : serialMap.values()) {
168+
if (group.size() > 1) {
169+
for (TrieNode node : group) {
170+
node.isDeleted = true;
171+
}
172+
}
173+
}
174+
175+
// Step 4: Collect remaining paths
176+
List<List<String>> result = new ArrayList<>();
177+
dfs(root, new ArrayList<>(), result);
178+
return result;
179+
}
180+
181+
private String serialize(TrieNode node) {
182+
if (node.children.isEmpty()) return "";
183+
184+
List<String> parts = new ArrayList<>();
185+
for (String childName : node.children.keySet().stream().sorted().toList()) {
186+
TrieNode child = node.children.get(childName);
187+
String sub = serialize(child);
188+
parts.add(childName + "[" + sub + "]");
189+
}
190+
191+
String serial = String.join("", parts);
192+
serialMap.computeIfAbsent(serial, k -> new ArrayList<>()).add(node);
193+
return serial;
194+
}
195+
196+
private void dfs(TrieNode node, List<String> path, List<List<String>> result) {
197+
for (TrieNode child : node.children.values()) {
198+
if (!child.isDeleted) {
199+
path.add(child.name);
200+
result.add(new ArrayList<>(path));
201+
dfs(child, path, result);
202+
path.remove(path.size() - 1);
203+
}
204+
}
205+
}
206+
}
138207

139208
```
140209

0 commit comments

Comments
 (0)