zoukankan      html  css  js  c++  java
  • Trie

    字典树

     1 class Trie {
     2     public:
     3         Trie() {
     4             root = new Node();
     5         }
     6 
     7         ~Trie() {
     8             destroy(root);
     9         }
    10 
    11         void insert(string word) {
    12             Node* next = root;
    13             for (int i = 0; i < word.length(); ++i) {
    14                 if (next->next[word[i] - 'a'] == NULL) {
    15                     next->next[word[i] - 'a'] = new Node();
    16                 }
    17                 next = next->next[word[i] - 'a'];            
    18             }
    19             next->val++; // 只要最尾个字符的位置计数
    20         }
    21 
    22         int search(string word) {
    23             Node* next = root;
    24             int i = 0;
    25             for (; i < word.length() && next != NULL; ++i) {
    26                 next = next->next[word[i] - 'a'];
    27             }
    28             if (i == word.length() && next != NULL) {
    29                 return next->val;
    30             } else {
    31                 return 0;
    32             }    
    33         }
    34 
    35     private:
    36         struct Node {
    37             int val;
    38             Node *next[26];
    39             Node(): val(0) {
    40                 memset(next, 0, sizeof(Node*) * 26);
    41             }
    42         };
    43 
    44         void destroy(Node* p) {
    45             if (p == NULL) return;
    46             for (int i = 0; i < 26; ++i) {
    47                 destroy(p->next[i]);
    48             }
    49             delete p;
    50         }
    51         Node* root;    
    52 };
  • 相关阅读:
    sed&awk 资料汇总 全是链接
    LeetCode Path 3Sum
    C++ mem_fun
    递归绑定
    查询当天数据
    清除script注入
    防注入查询
    我的最新分页
    群发邮件
    利用缓存
  • 原文地址:https://www.cnblogs.com/linyx/p/3978322.html
Copyright © 2011-2022 走看看