1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| class WordsFrequency { public: WordsFrequency(vector<string>& book) : root(new Node()) { for(auto& b : book) { auto pt = root; for(auto& ch : b) { if(!pt->childs[ch - 'a']) pt->childs[ch - 'a'] = new Node(); pt = pt->childs[ch - 'a']; } ++pt->f; } } int get(string word) { auto pt = root; for(auto& ch : word) { if(!pt->childs[ch - 'a']) return 0; pt = pt->childs[ch - 'a']; } return pt->f; } private: struct Node { Node* childs[26]; int f; }; Node* root; };
|