实现 Trie (前缀树)

题目链接

实现 Trie (前缀树)

题目描述

注意点

  • word 和 prefix 仅由小写英文字母组成

解答思路

  • 首先要理解前缀树是什么,参照该篇文章【图解算法】模板+变式------带你彻底搞懂字典树(Trie树)
  • 在了解前缀树是什么后,设计前缀树就会更加容易,因为本题中所有单词都仅由小写英文字母组成,所以哈希表只需要26个空间即可,若有些单词具有相同的前缀,则可视为它们有相同的父节点,也就是相当于构造一棵最大有26个子节点的二叉树,构造树的过程可以由以下图片表示:

代码

java 复制代码
class Trie {
    TrieNode root;

    public Trie() {
        root = new TrieNode();
    }
    
    public void insert(String word) {
        TrieNode currNode = root;
        for (char c : word.toCharArray()) {
            if (currNode.childNode[c - 'a'] == null) {
                currNode.childNode[c - 'a'] = new TrieNode();
            }
            currNode = currNode.childNode[c - 'a'];
        }
        currNode.isWord = true;
    }
    
    public boolean search(String word) {
        TrieNode currNode = root;
        for (char c : word.toCharArray()) {
            if (currNode.childNode[c - 'a'] == null) {
                return false;
            }
            currNode = currNode.childNode[c - 'a'];
        }
        if (!currNode.isWord) {
            return false;
        }
        return true;
    }
    
    public boolean startsWith(String prefix) {
        TrieNode currNode = root;
        for (char c : prefix.toCharArray()) {
            if (currNode.childNode[c - 'a'] == null) {
                return false;
            }
            currNode = currNode.childNode[c - 'a'];
        }
        return true;
    }
}

class TrieNode {
    boolean isWord;
    TrieNode[] childNode = new TrieNode[26];
}

关键点

  • 学习前缀树的相关知识
  • 构造前缀树的过程
相关推荐
Peter·Pan爱编程1 小时前
10. new_delete 不是 malloc_free 的包装
c++·人工智能·算法
不知名的老吴2 小时前
双栈秒杀表达式的生成方式
数据结构
故事和你912 小时前
洛谷-【动态规划1】动态规划的引入2
开发语言·数据结构·c++·算法·动态规划·图论
重生之我是Java开发战士2 小时前
【动态规划】背包问题:完全背包,二位费用的背包问题,似包非包
算法·动态规划
LabVIEW开发3 小时前
LabVIEW实现FDTD 电磁仿真
算法·labview·labview知识·labview功能·labview程序
Together_CZ3 小时前
DTSemNet :Vanilla Gradient Descent for Oblique Decision Trees——用于倾斜决策树的普通梯度下降
算法·决策树·机器学习·vanilla·gradient·dtsemnet·用于倾斜决策树的普通梯度
一条大祥脚3 小时前
ABC459 贪心构造|树形DP|组合数学|贪心|单调栈|势能|前缀和
算法·深度优先
灰灰勇闯IT4 小时前
DeepEP:MoE 推理的 AllToAll 通信瓶颈怎么解
算法·cann
一行代码一行诗++4 小时前
goto语句
java·开发语言·算法
汉克老师4 小时前
GESP5级C++考试语法知识(十七、二分算法提高篇(二))
c++·算法·二分算法·gesp5级·gesp五级·二分算法易错点