您的位置:首页 > 其它

LeetCode - Implement Trie (Prefix Tree)

2015-08-01 09:42 423 查看
Implement a trie with 
insert
search
,
and 
startsWith
 methods.

Note:

You may assume that all inputs are consist of lowercase letters 
a-z
.

一开始用了unorered_map,有点慢,换了数组后快了点

class TrieNode {
public:
char val;
TrieNode *children[26];
bool tail;
// Initialize your data structure here.
TrieNode() {
val = '\0';
for(int i = 0; i < 26; ++i)
children[i] = nullptr;
tail = false;
}
TrieNode(char c): val(c){
for(int i = 0; i < 26; ++i)
children[i] = nullptr;
tail = false;
}
};

class Trie {
public:
Trie() {
root = new TrieNode();
}

// Inserts a word into the trie.
void insert(string word) {
TrieNode *p = root;
int l = word.length();
for(int i = 0; i < l; ++i){
int j = word[i] - 'a';
if(!p->children[j]){
p->children[j] = new TrieNode(word[i]);
}
p = p->children[j];
}
p->tail = true;
}

// Returns if the word is in the trie.
bool search(string word) {
TrieNode *p = root;
int l = word.length();
for(int i = 0; i < l; ++i){
int j = word[i] - 'a';
if(!p->children[j])
return false;
p = p->children[j];
}
return p->tail;
}

// Returns if there is any word in the trie
// that starts with the given prefix.
bool startsWith(string prefix) {
TrieNode *p = root;
int l = prefix.length();
for(int i = 0; i < l; ++i){
int j = prefix[i] - 'a';
if(!p->children[j])
return false;
p = p->children[j];
}
return true;
}

private:
TrieNode* root;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode Trie