Skip to content

techtrendings.com

Let's explore

Menu
Menu

Implement Trie Data Structure in C++- LeetCode

Posted on January 19, 2023January 19, 2023 by Avidlearner

A trie (pronounced as “try”) or prefix tree is a tree data structure used to efficiently store and retrieve keys in a dataset of strings. There are various applications of this data structure, such as autocomplete and spellchecker.

Implement the Trie class:

  1. Trie() Initializes the trie object.
  2. void insert(String word) Inserts the string word into the trie.
  3. boolean search(String word) Returns true if the string word is in the trie (i.e., was inserted before), and false otherwise.
  4. boolean startsWith(String prefix) Returns true if there is a previously inserted string word that has the prefix prefix, and false otherwise.
Input
["Trie", "insert", "search", "search", "startsWith", "insert", "search"]
[[], ["apple"], ["apple"], ["app"], ["app"], ["app"], ["app"]]

Output:
[null, null, true, false, true, null, true]

Explanation:
Explanation
Trie trie = new Trie();
trie.insert("apple");
trie.search("apple");   // return True
trie.search("app");     // return False
trie.startsWith("app"); // return True
trie.insert("app");
trie.search("app");     // return True



class Trie {
public:
    Trie() {
        
    }
    
    void insert(string word) {
        Trie *node = this;
        for(char c:word)
        {
            c -= 'a';
            if(node->child[c] == NULL)
            {
                node->child[c] = new Trie();
            }
            node = node->child[c];
        }
        node->isWord = true;
        
    }
    
    bool search(string word) {
        Trie* node = this;
        for(char c:word)
        {
            c -= 'a';
            if(node->child[c])
            {
                node = node->child[c];
                
            }
            else
             return false;

        }
        return node->isWord;
       
    }
    
    bool startsWith(string prefix) {
        Trie* node = this;
        for(char c:prefix)
        {
            c -= 'a';
            if(node->child[c])
             node = node->child[c];
            else
            return false;
        }
        return true;
    }

    Trie *child[26] = {};
    bool isWord = false;
};

/**
 * 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);
 */

Complexity

Time:
insert(word): O(|word|)
search(word): O(|word|)
startsWith(prefix): O(|prefix|)
Space: O(T), where T is total of Trie nodes, in the worst case it's total number of characters of words we inserted.

Related

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • Implement Trie Data Structure in C++- LeetCode
  • How TLS Works
  • C++ – Factory Design Pattern – Creation Design Pattern
  • C++ – Strategy Design Pattern – Behavioral Design Pattern
  • LFU Cache Implementation – LeetCode

Recent Comments

  • automatically like friends photos on instagram on Program to find unpaired element in an Array in C++|Leetcode |techtrendings
  • Twicsy on Program to find unpaired element in an Array in C++|Leetcode |techtrendings

Archives

  • January 2023
  • November 2022
  • August 2022
  • June 2022
  • May 2022
  • March 2022
  • February 2022
  • January 2022

Categories

  • Algorithm
  • Algorithm
  • C++
  • Design Patterns
  • Multithreading
  • OS Concepts
  • Programming
  • Uncategorized

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

Join Our Mailing List for the Latest News and Updates.

© 2023 techtrendings.com | Powered by Superbs Personal Blog theme