hot100-49前缀树

一、题目

实现一个前缀树类,提供三个操作,

1)insert(word):插入一个单词。

2)search(word):判断单词是否完整存在于 Trie 中。

3)startsWith(prefix):判断是否存在以该前缀开头的单词。

二、思路

1、每个节点,使用定长数组实现子节点映射;isEnd=true属性表示从根节点到当前节点拼出的字符串是一个完整的词。

2、一种26叉树结构,每个节点代表一个字符,从根到某节点的路径构成一个前缀;通过 isEnd 标记该路径是否为一个完整单词的结尾。

三、代码

复制代码
class Trie {
    class TrieNode{
        TrieNode[] children;
        boolean isEnd;
        public TrieNode(){
            children = new TrieNode[26];
            isEnd = false;
        }
    }
    private TrieNode root;
    public Trie() {
        root = new TrieNode();
    }
    
    public void insert(String word) {
        TrieNode node = root;
        for(char c : word.toCharArray()){
            int index = c - 'a';
            if(node.children[index] == null){
                node.children[index] = new TrieNode();
            }
            node = node.children[index];
        }
        node.isEnd = true;
    }
    
    public boolean search(String word) {
        TrieNode node = searchPrefix(word);
        return node != null && node.isEnd;
    }
    
    public boolean startsWith(String prefix) {
        return searchPrefix(prefix) != null;
    }
    public TrieNode searchPrefix(String prefix){
        TrieNode node = root;
        for(char c : prefix.toCharArray()){
            int index = c - 'a';
            if(node.children[index] == null){
                return null;
            }
            node = node.children[index];
        }
        return node;
    }
}
相关推荐
亲爱的非洲野猪1 分钟前
深入解析享元模式:用Java实现高性能对象复用
java·开发语言·享元模式
qq_401700418 分钟前
Qt的.pro文件
开发语言·qt
FAFU_kyp17 分钟前
Rust 的 引用与借用
开发语言·算法·rust
喵星人工作室22 分钟前
C++传说:神明之剑0.4.5装备机制彻底完成
开发语言·c++·游戏
秦jh_24 分钟前
【Qt】系统相关(下)
开发语言·qt
东木月29 分钟前
使用python获取Windows产品标签
开发语言·windows·python
该用户已不存在29 分钟前
不止是初始化,4个C# 构造函数解析与实例
后端·c#·.net
pumpkin8451430 分钟前
Go 基础语法全景
开发语言·后端·golang
hqwest31 分钟前
码上通QT实战18--监控页面10-获取设备数据
开发语言·qt·湿度·modbus功能码·寄存器地址·从站数据·0103
星火开发设计43 分钟前
C++ multiset 全面解析与实战指南
开发语言·数据结构·c++·学习·set·知识