AlgoMooc
← 返回题库

K0038. 魔法书灵搜索仪

中等通过率 79% · 提交 61 · 通过 48
哈希表模拟字符串排序

在 星穹学院,小慕负责维护一个 知识图谱引擎,用于管理 项目ID 与 技术标签 的,并能高效检索符合查询条件的项目。 作为一名 算法工程师,小慕需要完成这个智能系统的构建,确保所有项目能够正确归档,并在需要时被快速定位。 你需要实现一个标签管理系统,该系统维护 项目ID 与 技术标签 的绑定关系,并支持以下三种指令: 1. `addWord project_id tags` - 向项目 `project_id` 绑定 `tags`。 - 如果 `project_id` 尚未被登记,则新建该项目并绑定 `tags`; - 如果 `project_id` 已存在,则向其添加 `tags`(不能重复)。 - 返回 该项目当前绑定的 标签总数。 2. `delWord project_id tags` - 从项目 `project_id` 中移除 `tags`。 - 如果 `project_id` 或 `tags` 不存在,则无操作; - 如果 `project_id` 绑定的所有标签都被删除,则从系统中移除该 `project_id`。 - 返回 该项目当前绑定的 标签总数(若 `project_id` 不存在,则返回 `0`)。 3. `query tags` - 查询包含所有 `tags` 的项目 `project_id`。 - 以 返回所有满足条件的项目 `project_id`。 - 若无匹配,返回 `-1`。

提示:带虚线的词点一下有通俗解释。

输入描述

- **第一行** 输入整数 `Q`,表示指令的数量。 - 接下来的 `Q` 组指令,每组格式如下: - `"SearchEngine"` **(仅在第一行出现,表示系统初始化,输出 `"null"`)** - `"addWord"` - `book_id`(书籍ID) - `n`(关键词数量) - `n` 个 **魔法关键词** - `"delWord"` - `book_id`(书籍ID) - `m`(待删除的关键词数量) - `m` 个 **待删除的魔法关键词** - `"query"` - `k`(查询关键词数量) - `k` 个 **查询的魔法关键词**

输出描述

- 对于 `"SearchEngine"` 指令,输出 `"null"`。 - 对于 `"addWord"` 和 `"delWord"` 指令,输出该 `book_id` 当前绑定的 **关键词总数**。 - 对于 `"query"` 指令,按 **升序** 输出所有符合条件的 `book_id`,以 **空格** 分隔;若无匹配,输出 `-1`。

示例

示例 1

输入

9
SearchEngine
addWord
1
2
fireball lightning
addWord
2
2
fireball lightning
query
2
fireball lightning
delWord
1
1
fireball
query
2
fireball lightning
query
1
lightning
delWord
2
1
fireball
query
2
fireball lightning

输出

null
2
2
1 2
1
2
1 2
1
-1

说明:1. **初始化搜索系统** - 初始化 `SearchEngine`,系统创建完成。 - **输出** `"null"`。 2. **向 `1` 号书籍绑定 `"fireball"` 和 `"lightning"`** - `1` 号书籍现在绑定了 `{fireball, lightning}`,共 **2** 个关键词。 - **输出** `2`(当前 `1` 号书籍的关键词总数)。 3. **向 `2` 号书籍绑定 `"fireball"` 和 `"lightning"`** - `2` 号书籍现在绑定 `{fireball, lightning}`,共 **2** 个关键词。 - **输出** `2`。 4. **查询包含 `"fireball"` 和 `"lightning"` 的书籍** - `1` 号书籍 **同时** 绑定了 `"fireball"` 和 `"lightning"`。 - `2` 号书籍 **同时** 绑定了 `"fireball"` 和 `"lightning"`。 - **符合条件的书籍ID按升序输出**: 5. **删除 `1` 号书籍中的 `"fireball"`** - `1` 号书籍现在只剩 `{lightning}`。 - **输出** `1`(`1` 号书籍的关键词总数)。 6. **查询包含 `"fireball"` 和 `"lightning"` 的书籍** - `1` 号书籍 **不再** 绑定 `"fireball"`,只剩 `"lightning"`,所以 **不符合查询**。 - `2` 号书籍 仍然绑定 `{fireball, lightning}`,所以 **符合查询**。 - **输出** `2`。 7. **查询包含 `"lightning"` 的书籍** - `1` 号书籍 **绑定** `{lightning}`,符合条件。 - `2` 号书籍 **绑定** `{fireball, lightning}`,也符合条件。 - **符合条件的书籍ID按升序输出**: 8. **删除 `2` 号书籍中的 `"fireball"`** - `2` 号书籍 现在只剩 `{lightning}`。 - **输出** `1`(`2` 号书籍的关键词总数)。 9. **查询包含 `"fireball"` 和 `"lightning"` 的书籍** - `1` 号书籍 只绑定 `{lightning}`,不符合查询条件。 - `2` 号书籍 只绑定 `{lightning}`,不符合查询条件。 - **无符合条件的书籍,返回 `-1`**:

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解(训练营专属)

登录后查看题目图解

题目图解为训练营学员专属内容,请先登录。

微信扫码登录还不是训练营学员?了解训练营 →
写完代码点「提交」,将对全部测试用例判题。