You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Trie实现LeetCode内存文件系统ls返回错误排查

内存文件系统实现问题修复

你的判断是对的,问题根源就是节点设计没有区分文件和目录,加上文件存储逻辑错误,导致ls访问文件路径时把内容当成了子项返回。

现有代码的核心错误

  • 节点结构无类型标识:所有节点都用普通字典实现,无法区分当前路径终点是文件还是目录
  • 文件存储逻辑错误:把文件内容作为字典键、'*'作为值存在路径终点,导致访问文件路径拿到的节点的key就是内容本身,ls遍历key时自然返回了内容而非文件名
  • 路径split('/')产生的空字符串虽然没触发根路径报错,但属于隐含的逻辑不严谨问题

修复方案

统一节点结构,给每个节点加两个内部保留字段做标记:

  • __is_file__:布尔值,标记当前节点是不是文件
  • __content__:字符串,仅文件节点使用,存储文件内容
    其余字典键均为目录下的子文件/子目录名。
    对应调整三个核心逻辑:
  1. ls方法遍历到路径终点后,先判断节点类型:如果是文件直接返回仅含当前文件名的列表;如果是目录则过滤掉内部保留字段,对子项排序后返回
  2. mkdir方法创建的节点默认标记为目录
  3. addContentToFile方法在路径最后一段创建/更新文件节点,内容直接存在节点的__content__字段,追加时直接拼接字符串,不要把内容当字典键存

修正后可直接通过的代码

from typing import List

class FileSystem:

    def __init__(self):
        self.root = {"__is_file__": False, "__content__": ""}

    def ls(self, path: str) -> List[str]:
        path_parts = [p for p in path.split("/") if p]
        cur = self.root
        for part in path_parts:
            cur = cur[part]
        if cur["__is_file__"]:
            return [path_parts[-1]]
        children = [name for name in cur.keys() if not name.startswith("__")]
        return sorted(children)

    def mkdir(self, path: str) -> None:
        path_parts = [p for p in path.split("/") if p]
        cur = self.root
        for part in path_parts:
            if part not in cur:
                cur[part] = {"__is_file__": False, "__content__": ""}
            cur = cur[part]
            
    def addContentToFile(self, filePath: str, content: str) -> None:
        path_parts = [p for p in filePath.split("/") if p]
        cur = self.root
        for part in path_parts[:-1]:
            if part not in cur:
                cur[part] = {"__is_file__": False, "__content__": ""}
            cur = cur[part]
        file_name = path_parts[-1]
        if file_name not in cur:
            cur[file_name] = {"__is_file__": True, "__content__": content}
        else:
            cur[file_name]["__content__"] += content

    def readContentFromFile(self, filePath: str) -> str:
        path_parts = [p for p in filePath.split("/") if p]
        cur = self.root
        for part in path_parts:
            cur = cur[part]
        return cur["__content__"]

验证说明

用你给出的错误测试用例运行,执行ls("/goowmfn/c")时,检测到c是文件节点,会直接返回["c"],和预期输出完全一致,不会再错误返回文件内容。

内容的提问来源于stack exchange,提问作者young_coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 12:06:51