字典树

字典树,是一种空间换时间的数据结构,又称Trie树、前缀树,是一种树形结构(字典树是一种数据结构),典型用于统计、排序、和保存大量字符串。
所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高

对于字典树,有三个重要性质:

  1. 根节点不包含字符,除了根节点每个节点都只包含一个字符。root节点不含字符这样做的目的是为了能够包括所有字符串。
  2. 从根节点到某一个节点,路过字符串起来就是该节点对应的字符串。
  3. 每个节点的子节点字符不同,也就是找到对应单词、字符是唯一的。

应用:
字符串检索、文本预测、自动完成,see also,拼写检查、词频统计、排序、字符串最长公共前缀、字符串搜索的前缀匹配、作为其他数据结构和算法的辅助结构等等。

class Trie {
    
    class TrieNode {
        TrieNode[] son;
        //结束标志
        boolean isEnd;
        //初始化
        public TrieNode() {
            son=new TrieNode[26];
        }
    }
    
    TrieNode root;

    /** Initialize your data structure here. */
    public Trie() {
        root = new TrieNode();
    }
    
    /** Inserts a word into the trie. */
    public void insert(String word) {
        //临时节点用来枚举
        TrieNode node=root;
        //枚举字符串
        for(int i=0;i<word.length();i++) {
            //找到26个对应位置
            int index=word.charAt(i)-'a';
            //如果为空需要创建
            if(node.son[index]==null) {
                node.son[index]=new TrieNode();
            }
            node=node.son[index];
        }
        //最后一个节点
        node.isEnd=true;
    }
    
    /** Returns if the word is in the trie. */
    public boolean search(String word) {
        TrieNode node = root;
        for (int i = 0; i < word.length(); i++) {
            int index = word.charAt(i) - 'a';
            if (node.son[index] != null) {
                node = node.son[index];
            } else {
                return false;
            }
        }
        return node.isEnd;
    }
    
    /** Returns if there is any word in the trie that starts with the given prefix. */
    public boolean startsWith(String prefix) {
        TrieNode node = root;
        for (int i = 0; i < prefix.length(); i++) {
            int index = prefix.charAt(i) - 'a';
            if (node.son[index] != null) {
                node = node.son[index];
            } else {
                return false;
            }
        }
        return true;
    }
}

见力扣208

上一篇:AP AUTOSAR 9——Persistency


下一篇:LeetCode - Word Search II