class Trie {
class Node{
Node() :next(26, nullptr), m_IsEnd(false){
}
bool m_IsEnd;
vector<Node*> next;
};
public:
/** Initialize your data structure here. */
Trie() {
}
/** Inserts a word into the trie. */
void insert(string word) {
Node* tn = &m_Head;
int c;
for (auto i : word) {
//c = word2Int(i);
c = i - 'a';
if (tn->next[c] == nullptr) {
tn->next[c] = new Node();
}
tn = (tn->next[c]);
}
tn->m_IsEnd = true;
}
/** Returns if the word is in the trie. */
bool search(string word) {
Node *tn = &m_Head;
int c;
for (auto i : word) {
//c = word2Int(i);
c = i - 'a';
if (tn->next[c] == nullptr) {
return false;
}
tn = tn->next[c];
}
return tn->m_IsEnd;
}
/** Returns if there is any word in the trie that starts with the given prefix. */
bool startsWith(string prefix) {
Node *tn = &m_Head;
int c;
for (auto i : prefix) {
//c = word2Int(i);
c = i - 'a';
if (tn->next[c] == nullptr) {
return false;
}
tn = tn->next[c];
}
return true;
}
private:
inline int word2Int(char c) {
return c - 'a';
}
private:
Node m_Head;
};
LeetCode Implement Trie (Prefix Tree)
最新推荐文章于 2022-07-07 15:28:55 发布