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. Quine-McCluskey两级逻辑化简算法原理解析

    转载请务必注明出处:https://www.cnblogs.com/the-wind/p/15764283.html 目录 1 背景介绍:两级逻辑 2 Quine-McCluskey两级逻辑化简 2. ...

  2. Less-3 和 Less-4 ')闭合绕过

    判断注入类型 测试:http://localhost/sqli-labs-master/Less-3/index.php?id=1a 正常回显,可以判断为 字符型注入 闭合字符串执行而已 SQL语句 ...

  3. 痞子衡嵌入式:RISC-V指令集架构MCU开发那些事 - 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是RISC-V指令集架构微控制器相关知识. RISC-V指令集最早要追溯到2010年,是加州大学伯克利分校的一个研究团队的项目,目标是设 ...

  4. 一文明白:JavaScript异步编程

    同步和异步 JS是单线程 JavaScript语言的一大特点是单线程,同一时间只能做一件事 (单线程的JS 就是一个傻子,脑子一根筋,做着当前的这件事情,没有完成之前,绝对不会做下一件事情) 当然,这 ...

  5. 安装node.js教程------深入使用Vue

    教程 1.下载nodejs引擎 网址:https://nodejs.org/en/download/ 选择32-bit或者64-bit都行 2.下载最新版npm.zip压缩包 网址:http://no ...

  6. ASP.NET Core使用filter和redis实现接口防重

    背景 日常开发中,经常需要对一些响应不是很快的关键业务接口增加防重功能,即短时间内收到的多个相同的请求,只处理一个,其余不处理,避免产生脏数据.这和幂等性(idempotency)稍微有点区别,幂等性 ...

  7. 手把手 Golang 实现静态图像与视频流人脸识别

    说起人脸识别,大家首先想到的实现方式应该是 Python 去做相关的处理,因为相关的机器学习框架,库都已经封装得比较好了.但是我们今天讨论的实现方式换成 Golang,利用 Golang 去做静态图像 ...

  8. 细节讲解并实操下: 去中心化社交协议 ---- Nostr

    作者:林冠宏 / 指尖下的幽灵.转载者,请: 务必标明出处. GitHub : https://github.com/af913337456/ 出版的书籍: <1.0-区块链DApp开发实战&g ...

  9. springboot 连接不上 redis 的三种解决方案!

    针对于这种情况,首先,我们最简单直接的方法就是需要确认Redis是否已经正常启动(验证方法:如果安装在Linux下的话可以使用ps-ef|grep redis来进行确认是否开启) 如果未开启,我们可以 ...

  10. 如何用Python对股票数据进行LSTM神经网络和XGboost机器学习预测分析(附源码和详细步骤),学会的小伙伴们说不定就成为炒股专家一夜暴富了

    前言 最近调研了一下我做的项目受欢迎程度,大数据分析方向竟然排第一,尤其是这两年受疫情影响,大家都非常担心自家公司裁员或倒闭,都想着有没有其他副业搞搞或者炒炒股.投资点理财产品,未雨绸缪,所以不少小伙 ...