Algorithm


Problem Name: 1233. Remove Sub-Folders from the Filesystem

Given a list of folders folder, return the folders after removing all sub-folders in those folders. You may return the answer in any order.

If a folder[i] is located within another folder[j], it is called a sub-folder of it.

The format of a path is one or more concatenated strings of the form: '/' followed by one or more lowercase English letters.

  • For example, "/leetcode" and "/leetcode/problems" are valid paths while an empty string and "/" are not.

 

Example 1:

Input: folder = ["/a","/a/b","/c/d","/c/d/e","/c/f"]
Output: ["/a","/c/d","/c/f"]
Explanation: Folders "/a/b" is a subfolder of "/a" and "/c/d/e" is inside of folder "/c/d" in our filesystem.

Example 2:

Input: folder = ["/a","/a/b/c","/a/b/d"]
Output: ["/a"]
Explanation: Folders "/a/b/c" and "/a/b/d" will be removed because they are subfolders of "/a".

Example 3:

Input: folder = ["/a/b/c","/a/b/ca","/a/b/d"]
Output: ["/a/b/c","/a/b/ca","/a/b/d"]

 

Constraints:

  • 1 <= folder.length <= 4 * 104
  • 2 <= folder[i].length <= 100
  • folder[i] contains only lowercase letters and '/'.
  • folder[i] always starts with the character '/'.
  • Each folder name is unique.

Code Examples

#1 Code Example with Java Programming

Code - Java Programming


class Solution {
  public List removeSubfolders(String[] folder) {
    Set set = new HashSet<>();
    Arrays.sort(folder, new Comparator < String>(){
      public int compare(String s1, String s2) {
        return s1.length() - s2.length();
      }
    });
    for (String fl : folder) {
      String[] files = fl.split("/");
      StringBuilder sb = new StringBuilder();
      for (int i = 1; i  <  files.length; i++) {
        sb.append("/").append(files[i]);
        if (set.contains(sb.toString())) {
          break;
        }
      }
      if (sb.length() > 0) {
        set.add(sb.toString());
      }
    }
    return new ArrayList < >(set);
  }
}
Copy The Code & Try With Live Editor

Input

x
+
cmd
folder = ["/a","/a/b","/c/d","/c/d/e","/c/f"]

Output

x
+
cmd
["/a","/c/d","/c/f"]

#2 Code Example with Python Programming

Code - Python Programming


class Solution:
    def removeSubfolders(self, folder: List[str]) -> List[str]:
        st = set(folder)
        for f in folder:
            if any(p in st for p in itertools.accumulate(f.split('/'), lambda x, y: x + '/' + y) if p and p != f):
                st.discard(f)
        return list(st)   
Copy The Code & Try With Live Editor

Input

x
+
cmd
folder = ["/a","/a/b","/c/d","/c/d/e","/c/f"]

Output

x
+
cmd
["/a","/c/d","/c/f"]
Advertisements

Demonstration


Previous
#1232 Leetcode Check If It Is a Straight Line Solution in C, C++, Java, JavaScript, Python, C# Leetcode
Next
#1234 Leetcode Replace the Substring for Balanced String Solution in C, C++, Java, JavaScript, Python, C# Leetcode