1166 设计文件系统

设计一个文件系统,提供`create(path, value)`创建路径并关联值,以及`get(path)`获取路径关联值的功能。路径由`/`和小写字母组成。示例展示了创建和获取操作的用法。解题思路包括使用字典树实现。" 111393679,10293490,深色模式设计:对比度的重要性与计算方法,"['UI设计', '深色主题', '用户体验设计', '色彩理论', '无障碍设计']
摘要由CSDN通过智能技术生成

题目描述:
你需要设计一个能提供下面两个函数的文件系统:
create(path, value): 创建一个新的路径,并尽可能将值 value 与路径 path 关联,然后返回 True。如果路径已经存在或者路径的父路径不存在,则返回 False。
get(path): 返回与路径关联的值。如果路径不存在,则返回 -1。
“路径” 是由一个或多个符合下述格式的字符串连接起来形成的:在 / 后跟着一个或多个小写英文字母。
例如 /leetcode 和 /leetcode/problems 都是有效的路径,但空字符串和 / 不是有效的路径。
好了,接下来就请你来实现这两个函数吧!(请参考示例以获得更多信息)

示例 1:
输入:
[“FileSystem”,“create”,“get”]
[[],["/a",1],["/a"]]
输出:
[null,true,1]
解释:
FileSystem fileSystem = new FileSystem();
fileSystem.create("/a", 1); // 返回 true
fileSystem.get("/a"); // 返回 1

示例 2:
输入:
[“FileSystem”,“create”,“create”,“get”,“create”,“get”]
[[],["/leet",1],["/leet/code",2],["/leet/code"],["/c/d",1],["/c"]]
输出:
[null,true,true,2,false,-1]
解释:
FileSystem fileSystem = new FileSystem();
fileSystem.create("/leet", 1); // 返回 true
fileSystem.create("/leet/code", 2); // 返回 true
fileSystem.get("/leet/code"); // 返回 2
fileSystem.create("/c/d", 1); // 返回 false 因为父路径 “/c” 不存在。
fileSystem.get("/c"); // 返回 -1 因为该路径不存在。

提示:
对两个函数的调用次数加起来小于等于 10^4
2 <= path.length <= 100
1 <= value <= 10^9

方法1:
主要思路:解题链接汇总
(1)构建字典树;
(2)将给出的路径先进行分割,得到每一级的结点字符串,若该字符串在字典树中有结点,则接着在字典树中遍历,若没有,则判断当前结点是否是分割路径中的最后一个结点,若是,则生成对应结点,并返回true;否则返回false;
(3)对于get函数,同样将路径先进行分割,判断路径的存在性即可;

struct Node {
   
    unordered_map<string,Node*> next;
    int value;
};
class FileSystem {
   
public:
    Node* root;
    FileSystem() {
   
        root=new Node();//初始化
    }
    //将给定的字符串进行分割,获得一个个结点
    void split_path(string&path,vector<string>&paths){
   
        int index=0;
        for(int i=0;i<path.size();++i){
   
            if(path[i]=='/'){
   
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值