目 录:
1.1 前缀树题目举例:一个字符串类型的数组 arr1,另一个字符串类型的数组 arr2
1.2 前缀树的 insert、delete、search、prefixNum 方法
一、前缀树:Prefix Tree
- 前缀树又叫字典树、Trie 树,单词查找树或键树,是一种多叉树结构。
- 前缀树的功能很强大,比如有一个字符串数据,我们要从查找其中以“hell”开头的(设置一个passN),或者以"ive"结尾的字符的个数等等操作。我们只需要在定义前缀树的时候加上相应得数据项就可以了。
- 建议:字母用边表示,不要塞到节点里【具体看代码实现】。
1.1 前缀树题目举例:一个字符串类型的数组 arr1,另一个字符串类型的数组 arr2
题目1、 arr2中有哪些字符,是arr1中出现的?请打印。
- 返回树中有多少个要求查找的单词 public int search(String word) 的变体。
题目2、arr2中有哪些字符,是作为arr1中某个字符串前缀出现的?请打印。
- 有多少单词以pre为前缀 public int prefixNumber(String pre)的变体。
题目3、arr2中有哪些字符,是作为arr1中某个字符串前缀出现的?请打印arr2中出现次数最大的前缀。
- 有多少单词以pre为前缀 public int prefixNumber(String pre),找最大的个。
1.2 前缀树的 insert、delete、search、prefixNum 方法
- 几种方法的代码相似度很高,前半部分基本一样,都是从 root 开始遍历;
-
假设刚开始我们,有一个空节点,现在我们有一个操作,往这个空的节点上insert字符串“abc”, 那么我们按照下面的步骤insert:
-
process: 1、首先看当前节点有没有指向字符'a'的路径,没有的话就创建指向'a'的路径,否则滑过到下一个字符,同样是看看有没有到该字符的路径。一直遍历完字符,并且都创建好了路径。如下图所示:
- 代码实现
package com.offer.foundation.class5;
/**
* @author pengcheng
* @date 2019/3/29 - 22:34
*