Description
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"]
Constraints:
- 1 <= folder.length <= 4 * 10^4.
- 2 <= folder[i].length <= 100.
- folder[i] contains only lowercase letters and ‘/’.
- folder[i] always starts with character ‘/’.
- Each folder name is unique.
分析
题目的意思是:保留一个数组里面的所有根目录,其他的删除。
我看见这题一开始的想法就是暴力破解,发现肯定复杂度很高,后面发现先排序,然后有同一根目录的目录就会被排序到一起,这样的话再遍历一次找出所有的根目录就行了。
代码
class Solution:
def removeSubfolders(self, folder: List[str]) -> List[str]:
folder.sort()
res=[]
parent=' '
for f in folder:
if(not f.startswith(parent)):
res.append(f)
parent=f+'/'
return res
参考文献
[LeetCode] [Python] Easy to understand, Sort & Check Parent, Faster than 100%