字典树又称单词查找树,Trie树,是一种树形结构,字典树的优点是利用字符串的公共前缀来提高查询效率,最大限度的减少字符串在查询过程中的字符比较次数。
(字典树的简单实现图)
字典树的结构有三点主要规范:
1.根节点不包含任何字符
2.根节点以外的任何结点都只包含一个字符
3.每个结点的子结点所包含的字符都不相同
字典树的最基本结构实现:
class Trie{
/*
* times用于记录该字符的存储次数(若为0说明没有存储该字符)
* ch数组是子结点
* isWord用于判断到达该结点时是否查询到了一个所存储的字符串
*/
int times;
Trie[] ch;
boolean isWord;
public Trie(){
//开辟的26段内存空间分别预留给代表26个英文字符的结点对象
ch=new Trie[26];
times=0;
isWord=false;
}
}
接下来以一道leetcode算法题为例说明字典树的基本应用
题目:给出 字符串 text 和 字符串列表 words, 返回所有的索引对 [i, j] 使得在索引对范围内的子字符串 text[i]…text[j](包括 i 和 j)属于字符串列表 words。
示例 :
输入: text = “thestoryofleetcodeandme”, words = [“story”,“fleet”,“leetcode”]
输出: [[3,7],[9,13],[10,17]]
运用字典树解题代码(Java):
class Solution {
//tree为字典树的空头结点
Trie tree =new Trie();
Vector<int[]