Leetcode刷题 2021.03.16
Leetcode588 设计内存文件系统
设计一个内存文件系统,模拟以下功能:
ls: 以字符串的格式输入一个路径。如果它是一个文件的路径,那么函数返回一个列表,仅包含这个文件的名字。如果它是一个文件夹的的路径,那么返回该 文件夹内 的所有文件和子文件夹的名字。你的返回结果(包括文件和子文件夹)应该按字典序排列。
mkdir:输入一个当前不存在的 文件夹路径 ,你需要根据路径名创建一个新的文件夹。如果有上层文件夹路径不存在,那么你也应该将它们全部创建。这个函数的返回类型为 void 。
addContentToFile: 输入字符串形式的 文件路径 和 文件内容 。如果文件不存在,你需要创建包含给定文件内容的文件。如果文件已经存在,那么你需要将给定的文件内容 追加 在原本内容的后面。这个函数的返回类型为 void 。
readContentFromFile: 输入 文件路径 ,以字符串形式返回该文件的 内容 。
昨天看到牛客面经里微信支付有这道题,就拿来做了一下。思路还是比较清楚的,类似于字典树的实现。但是一些细节的地方总是处理的不到位,试了四五次才AC。o(╥﹏╥)o
class FileSystem {
//字典树结点,这里用map来做目录下的结点,还有一个标志位判断是否是一个文件。
class Node{
Map<String, Node> map = new HashMap<>();
boolean isFile = false;
String content = "";
public Node(){
}
}
Node root;
public FileSystem() {
root = new Node();
}
public List<String> ls(String path) {
//字典树常规操作,不断找下一个目录
//分情况,是文件,或者是目录
Node cur = root;
List<String> res = new ArrayList<>();
if (!path.equals("/")){
String[] arr = path.split("/");
for(int i = 1; i < arr.length; i++){
cur = cur.map.get(arr[i]);
}
if (cur.isFile == true){
res.add(arr[arr.length - 1]);
return res;
}
}
List < String > res_files = new ArrayList < > (cur