题目
思路
定义一个这样的结点,isEnd标识是否是一个串的结束,字母映射表表示下一个字母。
struct TrieNode {
bool isEnd; //该结点是否是一个串的结束
TrieNode* next[26]; //字母映射表
};
查询时,依次查找每一个字符,返回最后一个结点的isEnd。判断是否是前缀,查找前缀中每一个字符,如果为空就返回false,否则返回true。
代码
class Trie {
private:
bool isEnd;
Trie* next[26];
public:
/** Initialize your data structure here. */
Trie() {
isEnd = false;
memset(next, 0, sizeof(next));
}
/** Inserts a word into the trie. */
void insert(string word) {
Trie* node = this;
for(char ch:word){
if(node -> next[ch - 'a'] == NULL){
node -> next[ch - 'a'] = new Trie();
}
node = node -> next[ch - 'a'];
}
node -> isEnd = true;
}
/** Returns if the word is in the trie. */
bool search(string word) {
Trie* node = this;
for(char ch : word){
node = node -> next[ch - 'a'];
if(node == NULL) return false;
}
return node -> isEnd;
}
/** Returns if there is any word in the trie that starts with the given prefix. */
bool startsWith(string prefix) {
Trie* node = this;
for(char ch : prefix){
node = node -> next[ch - 'a'];
if(node == NULL) return false;
}
return true;
}
};