你需要设计一个能提供下面两个函数的文件系统:
- create(path, value): 创建一个新的路径,并尽可能将值
value
与路径path
关联,然后返回True
。如果路径已经存在或者路径的父路径不存在,则返回False
。 - get(path): 返回与路径关联的值。如果路径不存在,则返回
-1
。
“路径” 是由一个或多个符合下述格式的字符串连接起来形成的:在 /
后跟着一个或多个小写英文字母。
例如 /leetcode
和 /leetcode/problems
都是有效的路径,但空字符串和 /
不是有效的路径。
好了,接下来就请你来实现这两个函数吧!(请参考示例以获得更多信息)
提示:
- 对两个函数的调用次数加起来小于等于
10^4
2 <= path.length <= 100
1 <= value <= 10^9
思路:
题目也不难,就是复杂一点,需要认真读题,找到所有条件。
题目说要把value和path相关联,所以用哈希表。
对于create,主要判断两个条件:
1. 给定的path存在吗,如果已经存在,则返回False
2. 给定的path的父路径都存在吗,如果有一个不存在的,则返回False
对于get,就非常简单了,直接在哈希表里找有没有这个path即可。
找父路径的过程可能有点tricky,需要处理字符串,
我用的方法是先用split把每一级的路径名找出来,然后在一层层地往后拼接。
class FileSystem(object):
def __init__(self):
self.dic = dict()
def create(self, path, value):
"""
:type path: str
:type value: int
:rtype: bool
"""
if path in self.dic:
return False
parent = path.split("/")
parent_path = ""
for i in range(1, len(parent) - 1):
parent_path += "/" + parent[i]
if parent_path not in self.dic:
return False
self.dic[path] = value
return True
def get(self, path):
"""
:type path: str
:rtype: int
"""
return self.dic[path] if path in self.dic else -1