AlgoMooc
← 返回题库

K0060. 魔法容器管理系统

困难通过率 67% · 提交 33 · 通过 22
哈希表字符串模拟

小慕正在开发一个魔法咒语管理项目,项目中有一个容器用来存储各种魔法咒语。每个咒语都由一串字符组成,小慕需要对这个容器进行插入、删除和等操作。 请你为小慕设计一个 `MagicContainer` 类,该类支持以下操作: 1. add(keyword):向容器中添加一个新的魔法咒语。 2. remove(keyword):从容器中删除指定的魔法咒语。 3. filter(sentence):根据前缀匹配规则,删除。 注: - 对于前缀匹配,如果容器中有多个字符串能匹配给定的前缀,则删除字典序最小的那个。 - 容器中每个字符串的长度不超过100,容器最多支持添加100,000个咒语。 操作描述 1. add(keyword):向容器中添加一个魔法咒语 `keyword`。如果该咒语已存在,则直接返回此时容器中的所有咒语数量;若该咒语不存在,则将该咒语加入容器,并返回容器中咒语的数量。 2. remove(keyword):在容器中删除魔法咒语 `keyword`。若该咒语存在,则返回删除后的容器大小;若该咒语不存在,则返回 -1。 3. filter(sentence):进行字符串前缀匹配,若有多个咒语的前缀匹配上 `sentence`,则删除字典序最小的匹配前缀。如果容器中有多个字符串能够匹配,则删除字典序最小的那个匹配,并返回此匹配的字符串;若没有匹配的前缀,返回 `-1`。

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

输入描述

- 第一行输入一个整数 `Q`,表示操作次数。 - 接下来的 `Q` 行中,每行包含一个命令 `cmd`,命令可能是: - `MagicContainer`:初始化容器。 - `add`:添加一个魔法咒语。 - `remove`:删除一个魔法咒语。 - `filter`:进行前缀匹配。 对于每个命令,具体的参数如下: - `MagicContainer`:不需要任何参数,初始化容器时输出 `null`。 - `add`:一个字符串 `keyword`,表示要添加的魔法咒语。 - `remove`:一个字符串 `keyword`,表示要删除的魔法咒语。 - `filter`:一个字符串 `sentence`,表示要进行前缀匹配的目标字符串。

输出描述

对于每个命令的执行结果,输出以下内容: - 对于 `add(keyword)`,输出当前容器中魔法咒语的数量。 - 对于 `remove(keyword)`,输出删除后的容器大小;若删除失败,输出 `-1`。 - 对于 `filter(sentence)`,该操作会删除匹配此前缀的最小字典序字符串,并输出该字符串。如果没有匹配的字符串,输出 `-1`。

示例

示例 1

输入

5
MagicContainer
add
fireball
add
frostbolt
remove
fireball
filter
fro

输出

null
1
2
1
frostbolt

说明:1. **初始化 MagicContainer**:第一行命令初始化了魔法容器,输出 `null`。 2. **添加 `fireball`**:容器中有一个元素 `"fireball"`,输出 `1`。 3. **添加 `frostbolt`**:容器中有两个元素 `"fireball"` 和 `"frostbolt"`,输出 `2`。 4. **删除 `fireball`**:删除 `fireball` 后,容器中剩下 `"frostbolt"`,输出 `1`。 5. **前缀匹配 `fro`**:匹配前缀 `fro` 时,删除字典序最小的匹配前缀 `"frostbolt"`,剩下容器为空,输出 `"frostbolt"`。

示例 2

输入

9
MagicContainer
add
test
add
tes
add
testing
remove
tes
filter
te
add
tesseract
remove
test
filter
t

输出

null
1
2
3
2
test
2
-1
tesseract

说明:1. **初始化 MagicContainer**:第一行命令初始化了魔法容器,输出 `null`。 2. **添加 `test`**:容器中有一个元素 `"test"`,输出 `1`。 3. **添加 `tes`**:容器中有两个元素 `"test"` 和 `"tes"`,输出 `2`。 4. **添加 `testing`**:容器中有三个元素 `"test"`, `"tes"`, 和 `"testing"`,输出 `3`。 5. **删除 `tes`**:删除 `tes` 后,容器中剩下两个元素 `"test"` 和 `"testing"`,输出 `2`。 6. **前缀匹配 `te`**:匹配前缀 `te` 时,删除字典序最小的匹配前缀 `"test"`,剩下一个元素 `"testing"`,输出 `"test"`。 7. **添加 `tesseract`**:容器中有两个元素 `"testing"` 和 `"tesseract"`,输出 `2`。 8. **删除 `test`**:删除 `test` 后,容器中剩下一个元素 `"tesseract"`,输出 `1`。 9. **前缀匹配 `t`**:匹配前缀 `t` 时,删除字典序最小的匹配前缀 `"testing"`,剩下 `"tesseract"`,输出 `"tesseract"`。

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

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

登录后查看题目图解

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

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