mirror of
https://github.com/trekhleb/javascript-algorithms.git
synced 2025-12-08 19:06:00 +00:00
46 lines
1.1 KiB
JavaScript
46 lines
1.1 KiB
JavaScript
import TrieNode from './TrieNode';
|
|
|
|
const HEAD_CHARACTER = '*';
|
|
|
|
export default class Trie {
|
|
constructor() {
|
|
this.head = new TrieNode(HEAD_CHARACTER);
|
|
}
|
|
|
|
addWord(word) {
|
|
const characters = Array.from(word);
|
|
let currentNode = this.head;
|
|
for (let charIndex = 0; charIndex < characters.length; charIndex += 1) {
|
|
const isComplete = charIndex === characters.length - 1;
|
|
currentNode = currentNode.addChild(characters[charIndex], isComplete);
|
|
}
|
|
}
|
|
|
|
suggestNextCharacters(word) {
|
|
const lastCharacter = this.getLastCharacterNode(word);
|
|
|
|
if (!lastCharacter) {
|
|
return null;
|
|
}
|
|
|
|
return lastCharacter.suggestChildren();
|
|
}
|
|
|
|
doesWordExist(word) {
|
|
return !!this.getLastCharacterNode(word);
|
|
}
|
|
|
|
getLastCharacterNode(word) {
|
|
const characters = Array.from(word);
|
|
let currentNode = this.head;
|
|
for (let charIndex = 0; charIndex < characters.length; charIndex += 1) {
|
|
if (!currentNode.hasChild(characters[charIndex])) {
|
|
return null;
|
|
}
|
|
currentNode = currentNode.getChild(characters[charIndex]);
|
|
}
|
|
|
|
return currentNode;
|
|
}
|
|
}
|