范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

LeetCode刷题实战588设计内存文件系统

  算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
  今天和大家聊的问题叫做 设计内存文件系统,我们先来看题面:
  https://leetcode-cn.com/problems/design-in-memory-file-system/
  Design an in-memory file system to simulate the following functions:
  ls: Given a path in string format. If it is a file path, return a list that only contains this file"s name. If it is a directory path, return the list of file and directory names in this directory. Your output (file and directory names together) should in lexicographic order.
  mkdir: Given a directory path that does not exist, you should make a new directory according to the path. If the middle directories in the path don"t exist either, you should create them as well. This function has void return type.
  addContentToFile: Given a file path and file content in string format. If the file doesn"t exist, you need to create that file containing given content. If the file already exists, you need to append given content to original content. This function has void return type.
  readContentFromFile: Given a file path, return its content in string format.
  设计一个内存文件系统,模拟以下功能:
  ls:以字符串的格式输入一个路径。如果它是一个文件的路径,那么函数返回一个列表,仅包含这个文件的名字。如果它是一个文件夹的的路径,那么返回该 文件夹内 的所有文件和子文件夹的名字。你的返回结果(包括文件和子文件夹)应该按字典序排列。
  mkdir:输入一个当前不存在的 文件夹路径 ,你需要根据路径名创建一个新的文件夹。如果有上层文件夹路径不存在,那么你也应该将它们全部创建。这个函数的返回类型为 void 。
  addContentToFile:输入字符串形式的 文件路径 和 文件内容 。如果文件不存在,你需要创建包含给定文件内容的文件。如果文件已经存在,那么你需要将给定的文件内容 追加 在原本内容的后面。这个函数的返回类型为 void 。
  readContentFromFile:输入 文件路径 ,以字符串形式返回该文件的 内容 。示例输入:
  ["FileSystem","ls","mkdir","addContentToFile","ls","readContentFromFile"]
  [[],["/"],["/a/b/c"],["/a/b/c/d","hello"],["/"],["/a/b/c/d"]]
  输出:
  [,[],,,["a"],"hello"]解题
  https://www.cnblogs.com/grandyang/p/6944331.html
  这道题让我们设计一个内存文件系统,实现显示当前文件,创建文件,添加内容到文件,读取文件内容等功能,感觉像是模拟一个terminal的一些命令。这道题比较tricky的地方是ls这个命令,题目中的例子其实不能很好的展示出ls的要求,其对文件和文件夹的处理方式是不同的。由于这里面的文件没有后缀,所以最后一个字符串有可能是文件,也有可能是文件夹。比如a/b/c,那么最后的c有可能是文件夹,也有可能好是文件,如果c是文件夹的话,ls命令要输出文件夹c中的所有文件和文件夹,而当c是文件的话,只需要输出文件c即可。另外需要注意的是在创建文件夹的时候,路径上没有的文件夹都要创建出来,还有就是在给文件添加内容时,路径中没有的文件夹都要创建出来。论坛上这道题的高票解法都新建了一个自定义类,但是博主一般不喜欢用自定义类来解题,而且感觉那些使用了自定义类的解法并没有更简洁易懂,所以这里博主就不创建自定义类了,而是使用两个哈希表来做,其中dirs建立了路径和其对应的包含所有文件和文件夹的集合之间的映射,files建立了文件的路径跟其内容之间的映射。
  最开始时将根目录"/"放入dirs中,然后看ls的实现方法,如果该路径存在于files中,说明最后一个字符串是文件,那么我们将文件名取出来返回即可,如果不存在,说明最后一个字符串是文件夹,那么我们到dirs中取出该文件夹内所有的东西返回即可。再来看mkdir函数,我们的处理方法就是根据"/"来分隔分隔字符串,如果是Java,那么直接用String自带的split函数就好了,但是C++没有Java那么多自带函数,所以只能借助字符串流类来处理,处理方法就是将每一层的路径分离出来,然后将该层的文件或者文件夹加入对应的集合中,注意的地方就是处理根目录时,要先加上"/",其他情况都是后加。下面来看addContentToFile函数,首先分离出路径和文件名,如果路径为空,说明是根目录,需要加上"/",然后看这个路径是否已经在dirs中存在,如果不存在,调用mkdir来创建该路径,然后把文件加入该路径对应的集合中,再把内容加入该文件路径的映射中。最后的读取文件内容就相当简单了,直接在files中返回即可,参见代码如下:class FileSystem {
  public:
  FileSystem {
  dirs["/"];
  }
  vector ls(string path) {
  if (files.count(path)) {
  int idx = path.find_last_of("/");
  return {path.substr(idx + 1)};
  }
  auto t = dirs[path];
  return vector(t.begin, t.end);
  }
  void mkdir(string path) {
  istringstream is(path);
  string t = "", dir = "";
  while (getline(is, t, "/")) {
  if (t.empty) continue;
  if (dir.empty) dir += "/";
  dirs[dir].insert(t);
  if (dir.size > 1) dir += "/";
  dir += t;
  }
  }
  void addContentToFile(string filePath, string content) {
  int idx = filePath.find_last_of("/");
  string dir = filePath.substr(0, idx);
  string file = filePath.substr(idx + 1);
  if (dir.empty) dir = "/";
  if (!dirs.count(dir)) mkdir(dir);
  dirs[dir].insert(file);
  files[filePath].append(content);
  }
  string readContentFromFile(string filePath) {
  return files[filePath];
  }
  private:
  unordered_map dirs;
  unordered_map files;
  };
  在看或者转发吧,你们的支持是我最大的动力 。
  上期推文:
  LeetCode1-580题汇总,希望对你有点帮助!
  LeetCode刷题实战581:最短无序连续子数组
  LeetCode刷题实战582:杀掉进程
  LeetCode刷题实战583:两个字符串的删除操作
  LeetCode刷题实战584:寻找用户推荐人
  LeetCode刷题实战585:2016年的投资
  LeetCode刷题实战586:订单最多的客户
  LeetCode刷题实战587:安装栅栏

你们的苹果X有遇到明明有网络,微信却一直无法连接的问题吗?你们是怎么解决的?由于苹果使用的是外挂基带,所以在网络质量方面一直都很一般,苹果iPhoneX的基带也有两个版本,国行全部都是高通基带,网络质量要好一些。而美版韩版等水货iPhoneX则有可能使用的现在红富士苹果价格猛涨,是好现象,还是坏现象呢?我说一下沂蒙山区的苹果吧。前些年,红富士,苹果,价格必较高,发展的必较快速的增加,地亩的数量。而且快速的扩散加大发展基本上,扩散到全国,各地。最近几年里,价格逐步的下降。现在就有些从小听力不好,说话不清楚,配个助听器效果会怎样?戴上助听器后要进行言语康复训练,慢慢练习,有很多孩子戴助听器后经过一段时间的言语康复训练都可以正常说话的可以佩戴助听器后,通过发音的纠正,达到更好的状况,但还是要自己加强发音的锻炼双十一耳机推荐,SOUNDPEATSAir3体验,佩戴舒适才重要其实近几年,主动降噪耳机非常火,但是这种类型的耳机一般都是采用入耳式,我个人觉得佩戴起来不是很舒服,在那样耳机的选择上,我更青睐于半入耳式。苹果的AirPods虽然音质表现不错,但真无线蓝牙耳机的天花板,JBLX600TWS小飓风带来定制级体验真无线蓝牙耳机如今已经成为了主流,一方面是因为手机厂商取消了3。5mm耳机接口的设计,二来则是便捷的佩戴方式和稳定的效果,让真无线耳机被更多的人接受。JBL于1946年正式成立,是入门无线耳机怎么选?长续航更轻盈,索尼WIXB400上手评测近年来TWS(真无线)耳机成为大多数人主要选择的耳机类型。但是真无线耳机在运动时使用,尤其是剧烈运动时耳机还是比较容易掉落,颈挂式无线在运动时使用相比真无线耳机更为适用。本文开箱的游泳耳机新选择,体验南卡RunnerPro2骨传导蓝牙耳机常去游泳的时候看到一些游得比较好的玩家戴着耳机,都是清一色的高端骨传导耳机,品牌就不说,基本就那几个,作为游泳耳机要有几个刚性功能,第一就是要有非常好的防水性能,耳机不会进水第二是跑步用蓝牙运动耳机哪款好?推荐骨传导运动耳机对于热爱跑步运动的人来说,入手一款骨传导耳机是最适合不过的了,其不用入耳就可以听歌也是让耳朵得到了极大的解放,更健康的耳机佩戴方式,降低对耳道的伤害。骨传导耳机,顾名思义,通过骨头OPPO三款新机曝光天玑900骁龙778G天玑1200Max今日早间消息,据知名爆料博主数码闲聊站带来的最新曝光内容称,OPPO的Reno7系列即将开始预热。本次的Reno7系列依旧会分为三个版本,分别为Reno7Reno7Pro和RenoASML就EUV光刻机再次表态,局势明朗了虽然我国是全球最大的半导体芯片消费市场,然而芯片综合自给率却不足20,以至于不得不依赖进口。据统计数据显示,近两年国内芯片市场的年均进口额突破了3000亿美元大关,所占比重远超石油谁是最牛的新能源电力运营商?上海电力(4)绿色装机的形成绿电装机产能的投产体现在装机容量的逐年增加,这个方面上海电力的披露感觉是做得最好的,先从上海电力的绿色装机投产过程来分析最近几年绿电装机容量投产的情况1上海电力是从2013年开始投
5G消息来了,就问微信怕不怕?近日,中国三大运营商联合发布了5G消息白皮书。一石激起千层浪,网上关于这个服务是否具有颠覆性,是否能有效反击微信的讨论热火朝天。可能很多人心里也在犯嘀咕,不就是区区一个消息服务么,5G手机到底牛逼在哪里?(SRS轮发)随着5G时代的到来,5G手机如雨后春笋般涌现。顾名思义,5G手机最大的卖点自然就是5G,其中一个术语SRS轮发经常看到厂家在宣传。据说支持SRS轮发之后,手机的上网速度会更快!这分敢做最潮玩家,引领时代潮流须眉剃须刀R2潮玩版体验前言提到剃须刀,我想对于每个男人都有几款吧?同时它也是除了手机以外最常用的生活产品了吧?而我也一直在寻找属于自己并且适合自己的剃须刀,之前买过很多产品,例如飞利浦米家须眉等等。随着在大数据面前,每个人都是赤裸的我的女儿还是高中生,你们却给她邮寄婴儿服和婴儿床的优惠券,这是在鼓励她怀孕吗?一个男子冲进一家商店,要求经理出来见他,并怒不可遏地说出了上述这句话。几天后,经理打电话向这个男人致歉5G的速度,可能比4G还要慢?2020年,作为5G元年,5G网络建设突飞猛进,5G手机也大量涌现。可是,就算是买了最新的5G手机,并且开机后手机右上角显示着大大的5G信号标识,可别着急为此欣喜若狂。实际用起来,5G室内覆盖为何要电信,联通和广电共建共享?2月10日,工信部发布消息称,已同意中国电信中国联通中国广电共同使用33003400MHz频段频率用于5G室内覆盖。再加上今年一月初广电获取的4。9GHz实验频谱,以及在去年确定的百度网盘,是怎样偷走你的流量的?近期,百度又一次站在了风口浪尖。这次的原因是,百度网盘搞了个用户激励计划,通过分享用户的闲置带宽以及电脑的存储空间,用来加快网盘的传输速度。当然,百度的这个计划对分享带宽和硬盘用户5G的速度到底能有多快?2020年已到。这一年正是国际电联5G愿景中的商用元年。实际上,从2019年开始,5G的幼苗早已在欧美中日韩破土而出。今年,这批幼苗正在茁壮成长,并已在全球分蘖蔓延成燎原之势。对于有了5G,这三种应用让生活更精彩!5G正在敞开怀抱,向我们飞奔而来。2020年伊始,5G的技术研究,前期的部署探索已经完成,宏图正在徐徐展开。中国的三大运营商经过来去年的练兵,今年要完成所有地级市的连续覆盖。随着各你的手机下载能有多快?原来手机的能力也分三六九等!众所周知,无线通信的发展,最核心的诉求就是要解决人民日益增长的网速需求和空口能力不足的矛盾。正是因为这样强大的驱动力,移动通信从1G发展到了4G,5G时代也已含苞待放。通信这事本来什么是5G工业互联网?一。从消费互联网到工业互联网在这个互联网如我们生活中的水和电一样无孔不入的时代,不能联网的设备是可耻的。它们像是一个一个的信息孤岛,原始而静寂。然而50年前,这样的信息孤岛却是这个