• 208. 实现 Trie (前缀树)


    2023.11.6

            前缀树本质上是一颗26叉树,对应着26个英文字母。其结构中需要定义两个信息:①一个节点数组child,存储了当前节点的所有子节点。②一个Boolean型变量,用于表示从根节点到当前节点为止,该路径是否形成了一个有效的字符串。

            构造函数Trie即初始化一个大小为26的节点数组child,再将Boolean型变量初始化为false。

            insert方法则需要遍历word字符串中的每个字符,若当前字符对应的子节点在节点数组child中没出现过,则添加一个新子节点到数组child对应位置上,然后继续搜索下一个字符对应的子节点;若当前字符对应的子节点出现过,则直接搜索下一个字符对应的子节点。

            search方法需要从根开始查找有无对应的字符串。依然是遍历word字符串的每个字符,若当前字符对应的节点在数组child中没有出现,直接返回false;如果出现了,则继续搜索下一个字符对应的子节点是否出现,直到遍历完毕。 最后判断一下当前节点的Boolean型变量isEnd是否为true,如果为true说明以当前节点结尾的字符串是一个有效的字符串,返回true,否则返回false。

            startsWith方法用来判断是否出现了对应前缀,代码和search差不多,唯一区别就是遍历完之后不需要判断isEnd,遍历完都没有返回false的话就直接返回true即可。

            java代码如下:

    1. class Trie {
    2. private Trie[] child;
    3. private boolean isEnd;
    4. public Trie() {
    5. child = new Trie[26];
    6. isEnd = false;
    7. }
    8. public void insert(String word) {
    9. Trie node = this;
    10. for(int i=0; i
    11. char c = word.charAt(i);
    12. int index = c - 'a';
    13. if(node.child[index] == null){
    14. node.child[index] = new Trie();
    15. }
    16. node = node.child[index];
    17. }
    18. node.isEnd = true;
    19. }
    20. public boolean search(String word) {
    21. Trie node = this;
    22. for(int i=0; i
    23. char c = word.charAt(i);
    24. int index = c - 'a';
    25. if(node.child[index] == null){
    26. return false;
    27. }
    28. node = node.child[index];
    29. }
    30. return node.isEnd;
    31. }
    32. public boolean startsWith(String prefix) {
    33. Trie node = this;
    34. for(int i=0; i
    35. char c = prefix.charAt(i);
    36. int index = c - 'a';
    37. if(node.child[index] == null){
    38. return false;
    39. }
    40. node = node.child[index];
    41. }
    42. return true;
    43. }
    44. }

  • 相关阅读:
    python基于BAC0库进行bacnet IP的读写
    C语言日记 33 构造函数
    读Shape-Guided代码②
    题目:2706.购买两块巧克力
    算法与设计分析 | 全排列问题
    Windows 环境搭建 PostgreSQL 物理复制高可用架构数据库服务
    「Python入门」Python多线程
    Java版工程项目管理系统平台+企业工程系统源码+助力工程企业实现数字化管理
    grid布局之容器属性grid-auto-columns&grid-auto-rows
    【Mapbox基础功能】01、前置学习资料(文档地址、accesstoken生成)
  • 原文地址:https://blog.csdn.net/m0_61028090/article/details/134244764