• [LeetCode] 208. Implement Trie (Prefix Tree)


    Implement a trie with insertsearch, and startsWith methods.

    Example:

    Trie trie = new Trie();
    
    trie.insert("apple");
    trie.search("apple");   // returns true
    trie.search("app");     // returns false
    trie.startsWith("app"); // returns true
    trie.insert("app");   
    trie.search("app");     // returns true
    

    Note:

    • You may assume that all inputs are consist of lowercase letters a-z.
    • All inputs are guaranteed to be non-empty strings.
      class TrieNode {
      public:
          TrieNode *child[26];
          bool isWord;
          TrieNode(): isWord(false) {
              for (auto &a : child) a = nullptr;
          }
          
      };
      class Trie {
      public:
          /** Initialize your data structure here. */
          Trie() {
              root = new TrieNode();
          }
          
          /** Inserts a word into the trie. */
          void insert(string word) {
              TrieNode *p = root;
              for (auto & iter : word) {
                  int i = iter - 'a';
                  if (!p->child[i]) {
                      p->child[i] = new TrieNode();
                      p = p->child[i];
                  } else {
                      p = p->child[i];
                  }
              }
              p->isWord = true;
          }
          
          /** Returns if the word is in the trie. */
          bool search(string word) {
              TrieNode *p = root;
              for (auto & iter : word) {
                  int i = iter - 'a';
                  if (p->child[i]) {
                      p = p->child[i];
                  } else {
                      return false;
                  }
              }
              return (p->isWord);
          }
          
          /** Returns if there is any word in the trie that starts with the given prefix. */
          bool startsWith(string prefix) {
               TrieNode *p = root;
               for (auto & iter : prefix) {
                  int i = iter - 'a';
                  if (p->child[i]) {
                      p = p->child[i];
                  } else {
                      return false;
                  }
              }
              return true;
          }
      private:
          TrieNode* root;
      };
      
      
      /**
       * Your Trie object will be instantiated and called as such:
       * Trie* obj = new Trie();
       * obj->insert(word);
       * bool param_2 = obj->search(word);
       * bool param_3 = obj->startsWith(prefix);
       */
  • 相关阅读:
    Eclipse扩展安装插件方式
    Tomcat通过JNDI方式链接MySql数据库
    ArrayList实现根据某属性大小相间排序
    JMeter 怎么保存登录状态
    JMeter怎么使用代理服务器
    JMeter模拟多个用户进行登录
    JMeter怎么在get URL请求、POST请求中添加动态参数用于服务器段安全验证
    (转)sizeof()和_countof()区别
    潜心修炼, 生活,会给你一个惊喜~
    最初的梦想
  • 原文地址:https://www.cnblogs.com/simplepaul/p/11330221.html
Copyright © 2020-2023  润新知