【Trie】LeetCode 208. 实现 Trie (前缀树)

题目链接

208. 实现 Trie (前缀树)

思路

字典树与多叉树非常类似,但是它本身结点不存储值

什么意思呢?

多叉树结点一般是这样的:

class Tree{
    int value;
    Tree[] next;
}

而字典树的结点一般是这样的:

class Trie{
    boolean isEnd;
    Trie[] next = new Trie[26];
}

next 数组实际是一个字母映射表,通过这个表来查找字符。

举个例子,比如说要存储字符串 "lee"

代码

class Trie {
    // current node is end node
    boolean isEnd;
    // Letters mapping table
    Trie[] next;

    public Trie() {
        this.isEnd = false;
        this.next = new Trie[26];
    }

    public void insert(String word) {
        Trie node = this;
        for(char c : word.toCharArray()){
            if(node.next[c - 'a'] == null){
                node.next[c - 'a'] = new Trie();
            }
            node = node.next[c - 'a'];
        }
        node.isEnd = true;
    }

    public boolean search(String word) {
        Trie node = this;
        for(char c : word.toCharArray()){
            node = node.next[c - 'a'];
            if(node == null){
                return false;
            }
        }

        return node.isEnd;
    }

    public boolean startsWith(String prefix) {
        Trie node = this;
        for(char c : prefix.toCharArray()){
            node = node.next[c - 'a'];
            if(node == null){
                return false;
            }
        }

        return true;
    }
}
posted @ 2023-03-01 09:35  Frodo1124  阅读(36)  评论(0编辑  收藏  举报