0
点赞
收藏
分享

微信扫一扫

剑指offer_062 实现前缀树

有点d伤 2022-03-10 阅读 40

题目:

示例:

解释

提示:

代码:

public class Trie {


    class TreeNode{
        TreeNode[] next;
        boolean isEnd;
        public TreeNode() {
            next = new TreeNode[26];
        }
    }

    TreeNode root;
    // 初始化前缀树
    public Trie() {
       root = new TreeNode();
    }
    // 插入
    public void insert(String word) {
        TreeNode cur = root;
        for (char c : word.toCharArray()) {
            int k = c - 'a';
            if (cur.next[k] == null) {
                cur.next[k] = new TreeNode();
            }
            cur = cur.next[k];
        }
        cur.isEnd = true;
    }
    // 查找单词
    public boolean search(String word) {
        TreeNode cur = root;
        for (char c : word.toCharArray()) {
            int k = c - 'a';
            if (cur.next[k] == null) {
                return false;
            }
            cur = cur.next[k];
        }
        return cur.isEnd;
    }
    // 查找前缀
    public boolean startsWith(String prefix) {
         TreeNode cur = root;
         for (char c : prefix.toCharArray()) {
             int k = c - 'a';
             if (cur.next[k] == null) {
                 return false;
             }
             cur = cur.next[k];
         }
         return true;
    }
}

解题思路:

实现前缀树,后面几道题都是根据这个基础来写的,可以说是一个模板,不过背模板很明显是不可取的,最重要的还是在理解的基础上进行记忆。前缀树可以看成是一个 26 叉树。首先要有一个节点类,定义一个 next 节点和标识当前节点是否是结尾的标志。然后定义一个树,在树中初始化根节点。然后定义插入方法,如果下一个位置为空直接 new 一个节点,然后不断后移,最后加一个结束标志。查找方法就是沿着根节点不断向下查找,如果是查找整个单词最后需要看一下结束标志,如果是查找前缀就不用查看。

注意:

注意身体。

参考链接:

 力扣

举报

相关推荐

0 条评论