博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode Remove Sub-Folders from the Filesystem
阅读量:4185 次
发布时间:2019-05-26

本文共 2783 字,大约阅读时间需要 9 分钟。

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.

 

------------------------------------------------------------------------------

My code, simulate a trie tree:

class Node:    def __init__(self, val, terminal, lst):        self.val = val        self.terminal = terminal        self.names = lst        self.sons = {}class Solution:    def removeSubfolders(self, folder):        res = []        root = Node("", False, [])        for path in folder:            names = path.split('/')            cur = root            for name in names:                if (name):                    # bug1                    # lst = cur.names                    # lst.extend(name)                    # bug2                    if (name not in cur.sons): #bug3                        cur.sons[name] = Node(name, False, cur.names+[name])                    cur = cur.sons[name]            cur.terminal = True        layers = [{root}, set()]        c, n = 0, 1        while (layers[c]):            for node in layers[c]:                if (node.terminal == True):                    res.append('/' + '/'.join(node.names))                else:                    for k,v in node.sons.items():                        layers[n].add(v)            layers[c].clear()            c, n = n, c        return ress = Solution()print(s.removeSubfolders(["/a/b/c","/a/b/ca","/a/b/d"]))

From leetcode discussion:

class Solution:    def removeSubfolders(self, folder):        res = set()        folder.sort(key=lambda x:len(x))        for path in folder:            #bug1 path[i] == '/'            if (not any(path[i] == '/' and path[:i] in res for i in range(2,len(path)))):                res.add(path)        return list(res)s = Solution()print(s.removeSubfolders(["/a/b/c","/a/b/ca","/a/b/d"]))

 

转载地址:http://ztfoi.baihongyu.com/

你可能感兴趣的文章
使用eclipse来调试hadoop作业是非常简洁方便的,
查看>>
配置sqoop的环境变量
查看>>
Optional类包含的方法
查看>>
如何使用MR来读取数据库的数据,并写入HDFS上
查看>>
mapred-site.xml里面配置运行日志的输出目录
查看>>
DistributedCache是Hadoop的一个分布式文件缓存类
查看>>
FileSplit:文件的子集--文件分割体
查看>>
使用Hadoop的MapReduce来完成大表join
查看>>
常用的算法
查看>>
Mina框架
查看>>
Spring MVC 和 Servlet 一样,都不是线程安全的
查看>>
Java线程:线程的同步与锁
查看>>
Mac、Windows可以互相远程
查看>>
oracle提示 ORA-12154: TNS: 无法解析指定的连接标识符
查看>>
oracle 插入数据时提示没有足够的值
查看>>
Oracle Net Manager的使用及配置
查看>>
镜像文件
查看>>
苹果笔记本桌面下面的工具栏没了怎么调出来
查看>>
CSS原理与CSS经验分享
查看>>
oracle中int与number的区别
查看>>