2022-02-20:设计内存文件系统。
设计一个内存文件系统,模拟以下功能:
ls: 以字符串的格式输入一个路径。如果它是一个文件的路径,那么函数返回一个列表,仅包含这个文件的名字。如果它是一个文件夹的的路径,那么返回该 文件夹内 的所有文件和子文件夹的名字。你的返回结果(包括文件和子文件夹)应该按字典序排列。
mkdir:输入一个当前不存在的 文件夹路径 ,你需要根据路径名创建一个新的文件夹。如果有上层文件夹路径不存在,那么你也应该将它们全部创建。这个函数的返回类型为 void 。
addContentToFile: 输入字符串形式的 文件路径 和 文件内容 。如果文件不存在,你需要创建包含给定文件内容的文件。如果文件已经存在,那么你需要将给定的文件内容 追加 在原本内容的后面。这个函数的返回类型为 void 。
readContentFromFile: 输入 文件路径 ,以字符串形式返回该文件的 内容 。
力扣588。

答案2022-02-20:

路径字符串按/分割成多个字符串,组装成树形结构。然后根据自然智慧就能求解。

代码用golang编写。代码如下:

package main

import (
"fmt"
"strings"
) func main() {
fs := NewFileSystem()
ret := make([]string, 0) ret = fs.ls("/")
fmt.Println("ls = ", ret) fs.mkdir("/a/b/c")
fs.addContentToFile("/a/b/c/d", "hello") ret = fs.ls("/")
fmt.Println("ls = ", ret) c := fs.readContentFromFile("/a/b/c/d")
fmt.Println("content = ", c)
} type Node struct {
// 文件名、目录名
name string
// content == null 意味着这个节点是目录
// content != null 意味着这个节点是文件
//public StringBuilder content;
content string
//public TreeMap<String, Node> nexts;
nexts map[string]*Node
} // 构造目录
func NewNode(n string) *Node {
ret := &Node{}
ret.name = n
//ret.content = null;
ret.nexts = make(map[string]*Node)
return ret
} // 构造文件,c是文件内容
func NewNode2(n, c string) *Node {
ret := &Node{}
ret.name = n
//content = new StringBuilder(c);
ret.content = c
//nexts = new TreeMap<>();
ret.nexts = make(map[string]*Node)
return ret
} type FileSystem struct {
head *Node
} func NewFileSystem() *FileSystem {
ret := &FileSystem{}
ret.head = NewNode("")
return ret
} func (this *FileSystem) ls(path0 string) []string {
//List<String> ans = new ArrayList<>();
ans := make([]string, 0)
cur := this.head
parts := strings.Split(path0, "/")
n := len(parts)
if path0 == "/" {
n = 1
}
for i := 1; i < n; i++ {
if _, ok := cur.nexts[parts[i]]; !ok {
return ans
}
cur = cur.nexts[parts[i]]
}
// cur结束了!来到path最后的节点,该返回了
// ls a/b/c cur 来到c目录
// 如果c是目录,那么就要返回c下面所有的东西!
// 如果c是文件,那么就值返回c
if cur.content == "" {
//ans.addAll(cur.nexts.keySet());///
for k, _ := range cur.nexts {
ans = append(ans, k)
}
//fmt.Println("aaa")
} else {
//ans.add(cur.name);///
ans = append(ans, cur.name)
//fmt.Println("bbb")
} return ans
} func (this *FileSystem) mkdir(path0 string) {
cur := this.head
parts := strings.Split(path0, "/")
n := len(parts)
for i := 1; i < n; i++ {
if _, ok := cur.nexts[parts[i]]; !ok {
cur.nexts[parts[i]] = NewNode(parts[i])
}
cur = cur.nexts[parts[i]]
} } func (this *FileSystem) addContentToFile(path0, content string) {
cur := this.head
parts := strings.Split(path0, "/")
n := len(parts)
for i := 1; i < n; i++ {
if _, ok := cur.nexts[parts[i]]; !ok {
cur.nexts[parts[i]] = NewNode(parts[i])
}
cur = cur.nexts[parts[i]] }
// 来到的是倒数第二的节点了!注意for!
if _, ok := cur.nexts[parts[n-1]]; !ok {
cur.nexts[parts[n-1]] = NewNode2(parts[n-1], "")
}
cur.content += content
} func (this *FileSystem) readContentFromFile(path0 string) string {
cur := this.head
parts := strings.Split(path0, "/")
n := len(parts)
for i := 1; i < n; i++ {
if _, ok := cur.nexts[parts[i]]; !ok {
cur.nexts[parts[i]] = NewNode(parts[i])
}
cur = cur.nexts[parts[i]]
}
return cur.content
}

执行结果如下:


左神java代码

2022-02-20:设计内存文件系统。 设计一个内存文件系统,模拟以下功能: ls: 以字符串的格式输入一个路径。如果它是一个文件的路径,那么函数返回一个列表,仅包含这个文件的名字。如果它是一个文件的更多相关文章

  1. 2022.02.20 SA

    2022.02.20 SA 如果我还能看见明天黎明,如果我还能再爬起来,我仍会走我的路,哪怕这条路已经荒废许久,也许我们无法拥有感情,我们甚至无法像个正常人一样接受太阳的洗礼,但是我依然会执行我的条约 ...

  2. controller函数中参数列表使用多个@RequestBody

    首先出现这种情况是因为有下面这种需求 $.ajax({ type: "POST", url: "${pageContext.request.contextPath}/co ...

  3. vscode笔记(一)- vscode自动生成文件头部注释和函数注释

    VsCode 自动生成文件头部注释和函数注释 作者:狐狸家的鱼 本文链接:vscode自动生成文件头部注释和函数注释 GitHub:sueRimn 1.安装插件KoroFileHeader 2.设置 ...

  4. C语言程序设计:综合设计实验一(设计一个文字游戏)

    目录 C语言程序设计:综合设计实验一(设计一个文字游戏) 1.实验要求 2.设计思路 3.源码 4.后话 C语言程序设计:综合设计实验一(设计一个文字游戏) 1.实验要求 (1) 设计一个文字游戏,通 ...

  5. Path,Files巩固,题目:从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中

    这个题目用传统的File,InputStream可以做,但是如果用Files,Path类做,虽然思路上会困难一些,但是代码简洁了很多,以下是代码: import java.io.IOException ...

  6. 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key, 用个数作为value,放入到map集合中,遍历map集合

    package cn.it.zuoye5; import java.io.File;import java.util.HashMap;import java.util.Iterator;import ...

  7. stdafx.h、stdafx.cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx.h? Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编

    sstdafx.h.stdafx.cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx.h? Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要 ...

  8. 通信方案软件设计(环形动态申请内存,支持USART+IIC+SPI+CAN协议

    1 <STM32进阶之串口环形缓冲区实现>中讲得比较清楚(链接) 2 amobbs中讲的方法有点复杂,以下是链接和参考源码: 通信方案软件设计(环形动态申请内存,支持USART+IIC+S ...

  9. 干货长文:Linux 文件系统与持久性内存介绍

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 1.Linux 虚拟文件系统介绍 在 Linux 系统中一切皆文件,除了通常所说的狭义的文件以 ...

  10. VC++打开对话框选择一个文件夹路径 BROWSEINFO结构

    typedef struct _browseinfoW { HWND hwndOwner; PCIDLIST_ABSOLUTE pidlRoot; LPWSTR pszDisplayName; // ...

随机推荐

  1. struts 1.x框架记录

    strus-config.xml 项目目录最顶层建立配置文件strus-config.xml action 通过type绑定java类,可通过attribute被引用 MyLoginForm.java ...

  2. rabbit.bat server启动闪退,rabbitmq (ArgumentError) argument error,rabbitmq页面无法开启解决方案

    步骤1:下载rabbitmq-plugins rabbitmq-plugins enable rabbitmq_managemen 步骤2:rabbitmq-service移除服务 rabbitmq- ...

  3. Unity2017-HTC项目串流Pico摇杆移动功能

    最近公司PC项目需要串流到Piconec3上运行,HTC手柄是圆盘键按下移动还可以,但是Piconeo3是摇杆,按下移动的话显得不科学,所以写了一套基于圆盘键,使用摇杆移动的方法 第一步:编写摇杆左右 ...

  4. vite生成vue3项目

    1.创建项目 npm init vite 2.根据提示输入项目名,也就是文件目录名,再选择框架 3.进入目录 npm install npm run dev 打完收工.

  5. 开学考--MIS系统(javaweb的开学练习--网络新闻发布系统)

    关于本次考试的相关理解 看到题目的时候,第一反应是这道题不难,之前已经做过十分类似的题目了,然后对于难度是很有自信的(当然,对于用户的权限管理部分,还是很懵): 而第二反应就是,题量挺大的,我在这有限 ...

  6. Axios的js文件的下载教程+相关应用

    下载教程来啦! 1.进入GitHub网站,网址在这里:http://github.com 2.去搜索框搜索Axios,得到如下界面: 3.然后选择这里: 会出现如下界面: 4.点击右方的绿色按钮&qu ...

  7. 全球IP whois信息获取与情报挖掘

    全球IP的whois信息获取与情报挖掘 什么是whois信息? Whois是一种网络协议,也是一种网络服务,能够让客户端查询域名或者IP是否注册,以及注册人的相关信息.我们通常所说的whois信息就是 ...

  8. Mybatis模糊查询的两种方式

    第一种 使用 || 字符: ** ** 第二种 使用 CONCAT 函数: ** ** 温馨提醒: 当然你也可以使用 $符 ,但是这种方式会导致不安全,让非法分子有机可寻,轻则数据库瘫痪,重则数据泄露 ...

  9. 搭建私有YUM仓库_及_内网镜像站

    搭建私有YUM仓库_及_内网镜像站 搭建私有YUM仓库(自己定制的rpm包)私有yum仓库环境系统版本:centos7.4 IP:192.168.1.47 #最好能上公网 私有yum仓库服务端配置 第 ...

  10. [PKM] 个人知识管理

    1 个人知识管理的需求 1.1 背景 随着信息大爆炸,碎片化的知识越来越多,原来中小学阶段在学校中习得的.传统的.基于纸质笔记的知识管理方式已不能满足当前的诉求. 传统的基于纸质笔记的知识管理方式 工 ...