@@ -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