• Implement Trie(LintCode) .


    Implement Trie

    Implement a trie with insert, search, and startsWith methods.

    样例
     
    注意

    You may assume that all inputs are consist of lowercase letters a-z.

    百度了一下,了解了字典树是啥,然后看了下实现的代码,然后自己写还是不难的(是啊,知道答案当然不会觉得难)。

    字典树

    又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。
     
    详细的可以看百度百科
     1 /**
     2  * Your Trie object will be instantiated and called as such:
     3  * Trie trie = new Trie();
     4  * trie.insert("lintcode");
     5  * trie.search("lint"); will return false
     6  * trie.startsWith("lint"); will return true
     7  */
     8 class TrieNode {
     9     // Initialize your data structure here.
    10     char val;
    11     boolean isEnd;
    12     int SIZE = 26;
    13     TrieNode[] children;
    14     
    15     
    16     public TrieNode() {
    17         children = new TrieNode[SIZE];
    18         isEnd = false;
    19     }
    20     public TrieNode(char val) {
    21         children = new TrieNode[SIZE];
    22         this.val = val;
    23         isEnd = false;
    24     }
    25 }
    26 
    27 public class Solution {
    28     private TrieNode root;
    29 
    30     public Solution() {
    31         root = new TrieNode();
    32     }
    33 
    34     // Inserts a word into the trie.
    35     public void insert(String word) {
    36         if(word == null || word.length() == 0) return;
    37         char[] cs = word.toCharArray();
    38         TrieNode p = root;
    39         for(int i=0;i<cs.length;i++) {
    40             int pos = cs[i] - 'a';
    41             if(p.children[pos] == null) {
    42                 p.children[pos] = new TrieNode(cs[i]);
    43             }
    44             p = p.children[pos];
    45         }
    46         if(!p.isEnd) p.isEnd = true;
    47     }
    48 
    49     // Returns if the word is in the trie.
    50     public boolean search(String word) {
    51         if(word == null || word.length() == 0) return false;
    52         char[] cs = word.toCharArray();
    53         TrieNode p = root;
    54         for(int i=0;i<cs.length;i++){
    55             int pos = cs[i] - 'a';
    56             if(p.children[pos] != null) {
    57                 p = p.children[pos];
    58             }else return false;
    59         }
    60         return p.isEnd;
    61     }
    62 
    63     // Returns if there is any word in the trie
    64     // that starts with the given prefix.
    65     public boolean startsWith(String prefix) {
    66         if(prefix == null || prefix.length() == 0) return false;
    67         char[] cs = prefix.toCharArray();
    68         TrieNode p = root;
    69         for(int i=0;i<cs.length;i++){
    70             int pos = cs[i] - 'a';
    71             if( p.children[pos] != null) {
    72                 p = p.children[pos];
    73             }else return false;
    74         }
    75         return true;
    76     }
    77 }
    View Code
  • 相关阅读:
    Intellij IDEA 关闭阿里编码规约“请不要使用行尾注释”提醒
    VS 进行了无法编译的编辑
    IntelliJ IDEA lombok log 报红
    SQL Server 事务执行SQL
    Linux 检查应用不在现就重启
    Java入门5.2---String类、StringBuffer类、StringBuilder类、System类、Data类、SimpleDataFormat类、Calendar类、Math类、BigInteger类与BigDecimal类
    为什么要进行补偿
    解决flex布局中 space-between方法的排版问题
    桑基图的使用场景
    清蒸罗非鱼的做法和步骤
  • 原文地址:https://www.cnblogs.com/FJH1994/p/5024754.html
Copyright © 2020-2023  润新知