Skip to content

Commit db9eb43

Browse files
Update README_EN.md
java solution
1 parent d25460d commit db9eb43

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_EN.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,75 @@ Note that the returned array can be in a different order as the order does not m
114114
#### Java
115115

116116
```java
117+
class Solution {
118+
static class TrieNode {
119+
Map<String, TrieNode> children = new HashMap<>();
120+
String name;
121+
boolean isDeleted = false;
122+
123+
TrieNode(String name) {
124+
this.name = name;
125+
}
126+
}
127+
128+
Map<String, List<TrieNode>> serialMap = new HashMap<>();
129+
130+
public List<List<String>> deleteDuplicateFolder(List<List<String>> paths) {
131+
TrieNode root = new TrieNode("");
132+
133+
// Step 1: Build the folder trie
134+
for (List<String> path : paths) {
135+
TrieNode curr = root;
136+
for (String folder : path) {
137+
curr.children.putIfAbsent(folder, new TrieNode(folder));
138+
curr = curr.children.get(folder);
139+
}
140+
}
141+
142+
// Step 2: Serialize and collect duplicates
143+
serialize(root);
144+
145+
// Step 3: Mark duplicate folders
146+
for (List<TrieNode> group : serialMap.values()) {
147+
if (group.size() > 1) {
148+
for (TrieNode node : group) {
149+
node.isDeleted = true;
150+
}
151+
}
152+
}
153+
154+
// Step 4: Collect remaining paths
155+
List<List<String>> result = new ArrayList<>();
156+
dfs(root, new ArrayList<>(), result);
157+
return result;
158+
}
159+
160+
private String serialize(TrieNode node) {
161+
if (node.children.isEmpty()) return "";
162+
163+
List<String> parts = new ArrayList<>();
164+
for (String childName : node.children.keySet().stream().sorted().toList()) {
165+
TrieNode child = node.children.get(childName);
166+
String sub = serialize(child);
167+
parts.add(childName + "[" + sub + "]");
168+
}
169+
170+
String serial = String.join("", parts);
171+
serialMap.computeIfAbsent(serial, k -> new ArrayList<>()).add(node);
172+
return serial;
173+
}
174+
175+
private void dfs(TrieNode node, List<String> path, List<List<String>> result) {
176+
for (TrieNode child : node.children.values()) {
177+
if (!child.isDeleted) {
178+
path.add(child.name);
179+
result.add(new ArrayList<>(path));
180+
dfs(child, path, result);
181+
path.remove(path.size() - 1);
182+
}
183+
}
184+
}
185+
}
117186

118187
```
119188

0 commit comments

Comments
 (0)