• 208. 实现 Trie (前缀树)


     

    labuladong 题解
    难度中等

    Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。

    请你实现 Trie 类:

    • Trie() 初始化前缀树对象。
    • void insert(String word) 向前缀树中插入字符串 word 。
    • boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。
    • boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix ,返回 true ;否则,返回 false 。

    示例:

    输入
    ["Trie", "insert", "search", "search", "startsWith", "insert", "search"]
    [[], ["apple"], ["apple"], ["app"], ["app"], ["app"], ["app"]]
    输出
    [null, null, true, false, true, null, true]
    
    解释
    Trie trie = new Trie();
    trie.insert("apple");
    trie.search("apple");   // 返回 True
    trie.search("app");     // 返回 False
    trie.startsWith("app"); // 返回 True
    trie.insert("app");
    trie.search("app");     // 返回 True




     1 class Trie {
     2     std::vector<Trie*> children;
     3     bool is_end;
     4 public:
     5     Trie() {
     6         is_end = false;
     7         children = std::vector<Trie*>(26);
     8     }
     9     
    10     void insert(string word) {
    11         Trie* node = this;
    12         for(auto ch : word) {
    13             if (node->children[ch-'a'] == nullptr) {
    14                 node->children[ch-'a'] = new Trie();
    15             }
    16             node = node->children[ch-'a'];
    17         }
    18         node->is_end = true;
    19     }
    20     
    21     bool search(string word) {
    22         Trie* node = this;
    23         for(auto ch : word) {
    24             if (node->children[ch - 'a'] == nullptr) {
    25                 return false;
    26             }
    27             node = node->children[ch-'a'];
    28         }
    29         return node->is_end;
    30     }
    31     
    32     bool startsWith(string prefix) {
    33         Trie* node = this;
    34         for(auto ch : prefix) {
    35             if (node->children[ch - 'a'] == nullptr) {
    36                 return false;
    37             }
    38             node = node->children[ch - 'a'];
    39         }
    40         return true;
    41     }
    42 };
    43 
    44 /**
    45  * Your Trie object will be instantiated and called as such:
    46  * Trie* obj = new Trie();
    47  * obj->insert(word);
    48  * bool param_2 = obj->search(word);
    49  * bool param_3 = obj->startsWith(prefix);
    50  */
  • 相关阅读:
    《深入理解Java虚拟机》笔记--第四章、虚拟机性能监控与故障处理工具
    《深入理解Java虚拟机》笔记--第三章 、垃圾收集器与内存分配策略
    《深入理解Java虚拟机》笔记--第二章、Java内存区域与内存溢出异常
    Netty并发优化之ExecutionHandler
    Netty框架入门
    123
    如何清理任务栏程序预览的历史记录?
    三个安装,看VIP电影
    WIN 10 COM surrogate 关闭
    微软官方win10系统安装u盘启动盘制作
  • 原文地址:https://www.cnblogs.com/zle1992/p/16332572.html
Copyright © 2020-2023  润新知