题目

方法
- 对于每一个节点,初始化一个长度为26的数组,用来存储对应字母子节点的地址
- 对于每一个节点,初始化一个
b
o
o
l
bool
bool 变量用来表示是否为叶子节点
代码
class Trie {
private:
vector<Trie*> children = vector<Trie*>(26);
bool is_end = false;
public:
Trie() {
}
void insert(string word) {
int n = word.size();
Trie* node = this;
for(int i = 0; i < n; i++){
if(node->children[int(word[i]-'a')] == nullptr){
node->children[int(word[i]-'a')] = new Trie();
}
node = node->children[int(word[i]-'a')];
}
node->is_end = true;
}
bool search(string word) {
int n = word.size();
Trie* node = this;
for(int i = 0; i < n; i++){
if(node->children[int(word[i]-'a')] == nullptr){
return false;
}
node = node->children[int(word[i]-'a')];
}
return node->is_end;
}
bool startsWith(string prefix) {
int n = prefix.size();
Trie* node = this;
for(int i = 0; i < n; i++){
if(node->children[int(prefix[i]-'a')] == nullptr){
return false;
}
node = node->children[int(prefix[i]-'a')];
}
return true;
}
};