1233. Remove Sub-Folders from the Filesystem

Given a list of folders, remove all sub-folders in those folders and return in any order the folders after removing.

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"]
 1 class Solution {
 2 public List<String> removeSubfolders(String[] folder) {
 3         LinkedList<String> ans = new LinkedList<>();
 4         Arrays.sort(folder);
 5         for (String f : folder) {
 6             if (ans.isEmpty() || !f.startsWith(ans.peekLast() + '/')) {//  need '/' to ensure a parent. 比如 /a/b  /a/bc
 7                 ans.offer(f);
 8             }
 9         }
10         return ans;
11     }
12 }

 

posted @ 2021-03-12 13:01  北叶青藤  阅读(72)  评论(0)    收藏  举报