小慕正在开发一个魔法咒语管理项目,项目中有一个容器用来存储各种魔法咒语。每个咒语都由一串字符组成,小慕需要对这个容器进行插入、删除和等操作。 请你为小慕设计一个 `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