Untitled
unknown
javascript
5 months ago
1.8 kB
4
Indexable
const EOS = '</EOS>'; var WordDictionary = function() { this.words = new Set(); this.trie = new Map(); this.wordsToIndex = []; // this trick beats 99.73% }; /** * @param {string} word * @return {void} */ WordDictionary.prototype.addWord = function(word) { if (!this.words.has(word)) { this.words.add(word); this.wordsToIndex.push(word); } }; /** * @param {string} word * @return {void} */ WordDictionary.prototype.indexWord = function(word) { let triePointer = this.trie; for (const letter of word) { if(!triePointer.has(letter)) { triePointer.set(letter, new Map()); } triePointer = triePointer.get(letter); } triePointer.set(EOS, null); } /** * @param {string} word * @return {boolean} */ WordDictionary.prototype.search = function(word) { if (word.includes('.')) { if (this.wordsToIndex.length > 0) { this.wordsToIndex.forEach(w => { this.indexWord(w); }); this.wordsToIndex = []; } return trieSearch(this.trie, word, 0); } return this.words.has(word); }; function trieSearch(root, word, index) { if (root === null) { return false; } if (word[index] === undefined) { return root.has(EOS); } if (word[index] === '.') { for (let [, nextRoot] of root.entries()) { if (trieSearch(nextRoot, word, index+1)) { return true; } } return false; } if(!root.has(word[index])) { return false; } return trieSearch(root.get(word[index]), word, index+1); } /** * Your WordDictionary object will be instantiated and called as such: * var obj = new WordDictionary() * obj.addWord(word) * var param_2 = obj.search(word) */
Editor is loading...
Leave a Comment