https://leetcode-cn.com/problems/implement-trie-prefix-tree/
说实话 一直以为挺难的东西 认真学了学(好像也没怎么太认真。。。严格意义上来说算是认真学习的第一天吧。。。艹 明天又要开始上英语了) 似乎也没有那么难 看了大佬们的题解之后 差不多可以懂得具体是个什么操作了
TrieNode方式
class TrieNode { public: vector<TrieNode*> children; bool isWord; TrieNode() : isWord(false), children(26, nullptr) { } ~TrieNode() { for (auto& c : children) delete c; } }; class Trie { public: /** Initialize your data structure here. */ Trie() { root = new TrieNode(); } /** Inserts a word into the trie. */ void insert(string word) { TrieNode* p = root; for (char a : word) { int i = a - 'a'; if (!p->children[i]) p->children[i] = new TrieNode(); p = p->children[i]; } p->isWord = true; } /** Returns if the word is in the trie. */ bool search(string word) { TrieNode* p = root; for (char a : word) { int i = a - 'a'; if (!p->children[i]) return false; p = p->children[i]; } return p->isWord; } /** Returns if there is any word in the trie that starts with the given prefix. */ bool startsWith(string prefix) { TrieNode* p = root; for (char a : prefix) { int i = a - 'a'; if (!p->children[i]) return false; p = p->children[i]; } return true; } private: TrieNode* root; }; 作者:fuxuemingzhu 链接:https://leetcode-cn.com/problems/implement-trie-prefix-tree/solution/fu-xue-ming-zhu-cong-er-cha-shu-shuo-qi-628gs/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
二维数组方式
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 50; class Trie { private: int trie[maxn][26]; int cnt[maxn]; int idx; public: Trie() { memset(trie, 0, sizeof(trie)); memset(cnt, 0, sizeof(cnt)); idx = 0; } void insert(string word) { int p = 0; for (char c : word) { int u = c - 'a'; if (!trie[p][u]) { idx++; trie[p][u] = idx; } p = trie[p][u]; } cnt[p]++; //统计数加1 } bool search(string word) { int p = 0; for (char c : word) { int u = c - 'a'; if(!trie[p][u]) { return false; } p = trie[p][u]; } return cnt[p]; } bool startsWith(string prefix) { int p = 0; for (char c : prefix) { int u = c - 'a'; if(!trie[p][u]) { return false; } p = trie[p][u]; } return true; } }; /** * Your Trie object will be instantiated and called as such: * Trie* obj = new Trie(); * obj->insert(word); * bool param_2 = obj->search(word); * bool param_3 = obj->startsWith(prefix); */
Comments | NOTHING