• 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. }

  • 相关阅读:
    Qt实战 数据统计柱状图显示
    【Layui】表单赋值 / 取值与任意位置按钮提交表单
    java面试之项目相关面试题目(未完待续)
    5.Vue2-模板语法
    网络安全等级保护测评师定义以及主要工作任务是什么?
    vue之作用域插槽和具名插槽slot、scope
    PolarDB 卷来卷去 云原生低延迟强一致性读 1 (SCC READ 译 )
    第十三届蓝桥杯省赛C++A组 D 题、C++C组 F 题、Java C 组 F 题——选数异或 (AC)
    四路定时控制器设计心得体会
    wps阶梯表格怎么做?wps阶梯表格制作教程
  • 原文地址:https://blog.csdn.net/m0_61028090/article/details/134244764