Menu
CoddyTech

Implement Trie (Prefix Tree)

中等字典树python iconjava iconcpp iconc iconjs icon+10

为小写单词构建一个字典树(前缀树),支持三种操作:insert w 添加单词 w,search w 用于判断是否插入了单词 w 本身,startsWith p 用于判断是否有某个已插入的单词以 p 开头。单词本身也算作它自己的前缀。

操作 i 是对 words[i] 执行的 ops[i]。按顺序在一个空字典树上执行这些操作,并为每个操作返回一个字符串:插入操作返回 "null",搜索操作或 startsWith 操作返回 "true" 或 "false"。

函数

trieOps(ops: string-array, words: string-array) → string-array
opsstring-array
这些操作及其运行顺序
wordsstring-array
每个操作对应的单词或前缀
返回值string-array
每次操作对应一个答案,且为文本

约束条件

  • 1 ≤ ops.length ≤ 2000
  • words.length == ops.length
  • 每个 ops[i] 都是 insert、search 或 startsWith。
  • 1 ≤ words[i].length ≤ 20
  • words[i] 只包含小写英文字母。

示例

输入
ops = ["insert", "search", "startsWith", "insert", "search"]words = ["card", "car", "car", "car", "car"]
输出
["null", "false", "true", "null", "true"]
解释
car 是 card 的开头,因此 startsWith car 的结果是 "true",但从未插入 car,所以第一次搜索结果是 "false"。插入 car 后,搜索就能找到它。
challenge icon

进阶

如何添加一个 countPrefix p 操作,在 O(L) 时间内返回以 p 开头的不同已存储单词的数量?

重置代码
def trieOps(ops, words):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

ops = ["insert", "search", "startsWith", "insert", "search"]
words = ["card", "car", "car", "car", "car"]

预期输出

["null", "false", "true", "null", "true"]