208. Implement Trie (Prefix Tree)
Problem Statement
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:
Trie()Initializes the trie object.void insert(String word)Inserts the stringwordinto the trie.boolean search(String word)Returnstrueif the stringwordis in the trie (i.e., was inserted before), andfalseotherwise.boolean startsWith(String prefix)Returnstrueif there is a previously inserted stringwordthat has the prefixprefix, andfalseotherwise.
Example 1:
Input
["Trie", "insert", "search", "search", "startsWith", "insert", "search"]
[[], ["apple"], ["apple"], ["app"], ["app"], ["app"], ["app"]]
Output
[null, null, true, false, true, null, true]
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
Constraints:
1 <= word.length, prefix.length <= 2000wordandprefixconsist only of lowercase English letters.At most
3 * 104calls in total will be made toinsert,search, andstartsWith.
Intuition
Approach:
Make a reference trie (struct node) for each alphabetLinks
https://leetcode.com/problems/implement-trie-prefix-tree/description/
Video Links
https://www.youtube.com/watch?v=dBGUmUQhjaM&ab_channel=takeUforward
Approach 1:
struct Node{
Node* links[26];
bool flag = false;
};
class Trie {
public:
Node* root;
Trie() {
root = new Node();
}
void insert(string s) {
Node* temp = root;
for(int i=0; i<s.size(); i++){
char ch = s[i];
if(temp->links[ch-'a'] == nullptr)
temp->links[ch-'a'] = new Node();
temp = temp->links[ch-'a'];
}
temp->flag = true;
}
bool search(string s) {
Node *temp = root;
for(int i=0; i<s.size(); i++){
char ch = s[i];
if(temp->links[ch-'a'] == nullptr)
return false;
temp = temp->links[ch-'a'];
}
if(temp->flag)
return true;
return false;
}
bool startsWith(string s) {
Node* temp = root;
for(int i=0; i<s.size(); i++){
char ch = s[i];
if(temp->links[ch - 'a'] == nullptr)
return false;
temp = temp->links[ch - 'a'];
}
return true;
}
};Approach 2:
Approach 3:
Approach 4:
Similar Problems
Last updated