zoukankan      html  css  js  c++  java
  • 208. 实现 Trie (前缀树)

    思路比较简单 只是这种类用的不太习惯。。

    插入就是看儿子的这个位置有没有,有就可以给计数加一下,没有就新建节点 插到最后一个字符就设置isend

    查找就是一直往下走,如果走不动了就false,否则判断走到最后的isend

    判断前缀更简单了,,一直判断就行,都不用判断最后的isend

     1 class Trie {
     2 private:
     3     bool isEnd;      //这么写 感觉一个像一个树又像一个节点。。不太习惯啊
     4     Trie* next[26];
     5 public:
     6     Trie() {
     7         isEnd = false;
     8         memset(next, 0, sizeof(next));
     9     }
    10     
    11     void insert(string word) {
    12         Trie* node = this;
    13         for (char c : word) {
    14             if (node->next[c-'a'] == NULL) {
    15                 node->next[c-'a'] = new Trie();
    16             }
    17             node = node->next[c-'a'];
    18         }
    19         node->isEnd = true;
    20     }
    21     
    22     bool search(string word) {
    23         Trie* node = this;
    24         for (char c : word) {
    25             node = node->next[c - 'a'];
    26             if (node == NULL) {
    27                 return false;
    28             }
    29         }
    30         return node->isEnd;
    31     }
    32     
    33     bool startsWith(string prefix) {
    34         Trie* node = this;
    35         for (char c : prefix) {
    36             node = node->next[c-'a'];
    37             if (node == NULL) {
    38                 return false;
    39             }
    40         }
    41         return true;
    42     }
    43 };
    每天进步一点点~
  • 相关阅读:
    Shiro安全框架之集成 Web(下)
    Shiro安全框架之集成 Web(中)
    Shiro安全框架之集成 Web(上)
    01背包
    巴什博弈
    斐波那契博弈
    一. 至少转最多
    平面分割类问题
    求凸包(安德鲁算法)
    GCD和exGCD
  • 原文地址:https://www.cnblogs.com/libin123/p/14628088.html
Copyright © 2011-2022 走看看