LeetCode 0588. Design In-Memory File System Solution in Java, Python, C++, JavaScript, Go & Rust | Explanation + Code

CoderIndeed
0
0588. Design In-Memory File System

Description

Design a data structure that simulates an in-memory file system.

Implement the FileSystem class:

  • FileSystem() Initializes the object of the system.
  • List<String> ls(String path)
    • If path is a file path, returns a list that only contains this file's name.
    • If path is a directory path, returns the list of file and directory names in this directory.
    The answer should in lexicographic order.
  • void mkdir(String path) Makes a new directory according to the given path. The given directory path does not exist. If the middle directories in the path do not exist, you should create them as well.
  • void addContentToFile(String filePath, String content)
    • If filePath does not exist, creates that file containing given content.
    • If filePath already exists, appends the given content to original content.
  • String readContentFromFile(String filePath) Returns the content in the file at filePath.

 

Example 1:

Input
["FileSystem", "ls", "mkdir", "addContentToFile", "ls", "readContentFromFile"]
[[], ["/"], ["/a/b/c"], ["/a/b/c/d", "hello"], ["/"], ["/a/b/c/d"]]
Output
[null, [], null, null, ["a"], "hello"]

Explanation FileSystem fileSystem = new FileSystem(); fileSystem.ls("/"); // return [] fileSystem.mkdir("/a/b/c"); fileSystem.addContentToFile("/a/b/c/d", "hello"); fileSystem.ls("/"); // return ["a"] fileSystem.readContentFromFile("/a/b/c/d"); // return "hello"

 

Constraints:

  • 1 <= path.length, filePath.length <= 100
  • path and filePath are absolute paths which begin with '/' and do not end with '/' except that the path is just "/".
  • You can assume that all directory names and file names only contain lowercase letters, and the same names will not exist in the same directory.
  • You can assume that all operations will be passed valid parameters, and users will not attempt to retrieve file content or list a directory or file that does not exist.
  • You can assume that the parent directory for the file in addContentToFile will exist.
  • 1 <= content.length <= 50
  • At most 300 calls will be made to ls, mkdiraddContentToFile, and readContentFromFile.

Solutions

Solution 1

PythonJavaGo
class Trie: def __init__(self): self.name = None self.isFile = False self.content = [] self.children = {} def insert(self, path, isFile): node = self ps = path.split('/') for p in ps[1:]: if p not in node.children: node.children[p] = Trie() node = node.children[p] node.isFile = isFile if isFile: node.name = ps[-1] return node def search(self, path): node = self if path == '/': return node ps = path.split('/') for p in ps[1:]: if p not in node.children: return None node = node.children[p] return node class FileSystem: def __init__(self): self.root = Trie() def ls(self, path: str) -> List[str]: node = self.root.search(path) if node is None: return [] if node.isFile: return [node.name] return sorted(node.children.keys()) def mkdir(self, path: str) -> None: self.root.insert(path, False) def addContentToFile(self, filePath: str, content: str) -> None: node = self.root.insert(filePath, True) node.content.append(content) def readContentFromFile(self, filePath: str) -> str: node = self.root.search(filePath) return ''.join(node.content) # Your FileSystem object will be instantiated and called as such: # obj = FileSystem() # param_1 = obj.ls(path) # obj.mkdir(path) # obj.addContentToFile(filePath,content) # param_4 = obj.readContentFromFile(filePath)(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !