题目
Implement a trie with insert, search, and startsWith methods.
Note:
You may assume that all inputs are consist of lowercase letters a-z.
题目来自于:https://leetcode.com/problems/implement-trie-prefix-tree/
分析
实现一个字典树,字典树的相关概念见http://blog.youkuaiyun.com/u010902721/article/details/45749447
代码
class TrieNode {
public:
// Initialize your data structure here.
int is_last_char;
TrieNode *next[26];
TrieNode() {
is_last_char = 0;
for(int i = 0; i < 26; i++)
next[i] = NULL;
}
};
class Trie {
public:
Trie() {
root = new TrieNode();
}
// Inserts a word into the trie.
void insert(string s) {
int len = s.length();
TrieNode* p = root;
for(int i = 0; i < len; i++){
int d = s.at(i) - 'a';
if(p->next[d] == NULL){
p->next[d] = new TrieNode();
p->next[d]->is_last_char = 0;
}
p = p->next[d];
}
p->is_last_char = 1;
}
// Returns if the word is in the trie.
bool search(string key) {
TrieNode *p = root;
int len = key.length();
for(int i = 0; i < len; i++){
int d = key.at(i) - 'a';
if(p->next[d] == NULL)
return false;
else
p = p->next[d];
}
if(p->is_last_char == 1)
return true;
else
return false;
}
// Returns if there is any word in the trie
// that starts with the given prefix.
bool startsWith(string prefix) {
TrieNode *p = root;
int len = prefix.length();
for(int i = 0; i < len; i++){
int d = prefix.at(i) - 'a';
if(p->next[d] == NULL)
return false;
else
p = p->next[d];
}
return true;
}
private:
TrieNode* root;
};
// Your Trie object will be instantiated and called as such:
// Trie trie;
// trie.insert("somestring");
// trie.search("key");
564

被折叠的 条评论
为什么被折叠?



