用Python设计文件系统


假设我们必须设计一个提供以下两个功能的文件系统:

  1. createPath(path, value) − 如果可能,此函数创建一个新路径并为其关联一个值,并返回 True。如果路径已存在或其父路径不存在,则返回 False。
  2. get(path) − 此函数查找与路径关联的值,如果路径不存在,则返回 -1。

路径的格式是由一个或多个以“/”开头,后跟一个或多个小写英文字母的字符串连接而成。例如,/programming 和 /programming/problems 是有效的路径,而空字符串和 / 不是。这里我们必须实现这两个函数。

例如,如果我们创建一个文件系统,然后使用 [‘/a’, 1] 创建一个路径,那么在使用 get() 函数和参数 [‘/a’] 后,输出将为 1。

为了解决这个问题,我们将遵循以下步骤:

  • 定义一个映射 d
  • createPath 方法将接收路径和值,其工作方式如下:
  • p := 通过“/”分割路径得到的组件列表
  • x := d
  • 对于范围从 1 到 p 的长度减 1 的 i
    • 如果 x 中不存在 p[i],则返回 false
    • x := x[p[i]][1]
  • 如果 x 中存在 p 的最后一个元素,则返回 false
  • x[p 的最后一个元素] := 包含 v 和空映射的列表
  • 返回 true
  • get() 方法接收路径
  • x := d
  • p := 通过“/”分割路径得到的组件列表
  • 对于范围从 1 到 p 的长度减 1 的 i
    • 如果 x 中不存在 p[i],则返回 -1
    • x := x[p[i]][1]
  • 如果 x 中存在 p 的最后一个元素,则返回 x[p 的最后一个元素][0],否则返回 -1

示例(Python)

让我们来看下面的实现,以便更好地理解:

 在线演示

class FileSystem(object):
   def __init__(self):
      self.d = {}
   def create(self, p, v):
      p = p.split("/")
      x = self.d
      for i in range(1,len(p)-1):
         if p[i] not in x:
            return False
         x = x[p[i]][1]
      if p[-1] in x:
         return False
      x[p[-1]] = [v,{}]
      return True
   def get(self, p):
      x = self.d
      p = p.split("/")
      for i in range(1,len(p)-1):
         if p[i] not in x:
            return -1
         x= x[p[i]][1]
      if p[-1] in x:
         return x[p[-1]][0]
      else:
         return -1
ob = FileSystem()
print(ob.create("/a", 1))
print(ob.get("/a"))

输入

Initialize the object, then call createPath(“/a”, 1) and get(“/a”)

输出

True
1

更新于:2020年4月30日

2K+ 次浏览

启动你的职业生涯

完成课程获得认证

开始
广告