字典树的实现

last modify

字典树的实现_牛客题霸_牛客网

问题简述

字典树又称为前缀树或者Trie树,是处理字符串常用的数据结构。

假设组成所有单词的字符仅是‘a’~‘z’,请实现字典树的结构,并包含以下四个主要的功能。

1. void insert(String word):添加word,可重复添加;
2. void delete(String word):删除word,如果word添加过多次,仅删除一次;
3. boolean search(String word):查询word是否在字典树中出现过(完整的出现过,前缀式不算);
4. int prefixNumber(String pre):返回以字符串pre作为前缀的单词数量。

现在给定一个m,表示有m次操作,每次操作都为以上四种操作之一。每次操作会给定一个整数op和一个字符串word,op代表一个操作码,如果op为1,则代表添加word,op为2则代表删除word,op为3则代表查询word是否在字典树中,op为4代表返回以word为前缀的单词数量(数据保证不会删除不存在的word)。

对于每次操作,如果op为3时,如果word在字典树中,请输出“YES”,否则输出“NO”;如果op为4时,请输出返回以word为前缀的单词数量,其它情况不输出。

进阶:所有操作的时间复杂度都满足 O(n)

思路

  • 本质上是一个 N 叉树,根据需求,为每个节点添加一些属性以达到某些操作的要求;

    class TrieNode:
        def __init__(self):
            self.children = [None] * 26  # 子节点(词表大小为 26)
            self.is_end = False          # 该节点是否为单词
            self.pre_cnt = 0             # 记录该路径的作为前缀的次数
  • 相同实现 Python 实现会超时;Java 不会;

Python(超时)
Java

Last updated