118просмотров
6.6%от подписчиков
25 марта 2026 г.
statsScore: 130
Задача: 1166. Design File System
Сложность: medium Вам нужно разработать файловую систему, которая позволяет создавать новые пути и связывать их с различными значениями. Формат пути - это одна или несколько конкатенированных строк в форме: /, за которой следует одна или несколько строчных английских букв. Например, "/leetcode" и "/leetcode/problems" - допустимые пути, в то время как пустая строка "" и "/" не допустимы. Реализуйте класс FileSystem: - bool createPath(string path, int value) создает новый путь и связывает с ним значение, если это возможно, и возвращает true. Возвращает false, если путь уже существует или его родительский путь не существует.
- int get(string path) возвращает значение, связанное с путем, или возвращает -1, если путь не существует. Пример:
Input: ["FileSystem","createPath","get"]
[[],["/a",1],["/a"]]
Output: [null,true,1]
Explanation: FileSystem fileSystem = new FileSystem(); fileSystem.createPath("/a", 1); // return true
fileSystem.get("/a"); // return 1 👨💻 Алгоритм: 1⃣Инициализируйте словарь или HashMap под названием paths, который будет использовать ключ в виде пути, переданного в нашу функцию create, и значение, переданное этой функции. 2⃣Для функции create выполняем три шага. Сначала выполняем базовую проверку валидности пути. Проверяем, является ли путь пустым, "/" или если путь уже существует в нашем словаре. Если любое из этих условий выполнено, просто возвращаем false. Затем получаем родительский путь предоставленного пути и проверяем его наличие в словаре. Если родительский путь не существует, возвращаем false, иначе продолжаем. 3⃣Наконец, вставляем предоставленный путь и значение в словарь и возвращаем true. Для функции get просто возвращаем значение по умолчанию -1, если путь не существует в словаре. В противном случае возвращаем фактическое значение. 😎 Решение:
class FileSystem { private val paths = HashMap<String, Int>() fun createPath(path: String, value: Int): Boolean { if (path.isEmpty() || (path.length == 1 && path == "/") || paths.containsKey(path)) { return false } val delimIndex = path.lastIndexOf("/") val parent = path.substring(0, delimIndex) if (parent.length > 1 && !paths.containsKey(parent)) { return false } paths[path] = value return true } fun get(path: String): Int { return paths.getOrDefault(path, -1) }
} Ставь 👍 и забирай 📚 Базу знаний