Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- "use strict";
- const util = require('util')
- class TrieNode {
- constructor(l) {
- this.letter = l;
- this.isFullWord = false;
- this.letters = {};
- this.wordCount = 0;
- }
- isAdjacent(letter) {
- return letter in this.letters
- }
- add (name, i) {
- this.wordCount++;
- if ( name.length == i ) {
- this.isFullWord = true;
- return
- }
- let letter = name[i];
- if (!this.isAdjacent(letter)) {
- this.letters[ letter ] = new TrieNode(letter);
- }
- this.letters[ letter ].add( name, i+1 );
- }
- countByPrefix (prefix, i) {
- let wordCount = 0;
- if (prefix.length == i) {
- wordCount = this.wordCount;
- } else {
- let letter = prefix[i];
- if (letter in this.letters) {
- wordCount = this.letters[ letter ].countByPrefix(prefix, i+1)
- }
- }
- return wordCount;
- }
- }
- class Agenda {
- constructor() {
- this.agenda = {};
- }
- addContact(name) {
- let letter = name[0];
- if (! (letter in this.agenda)) {
- this.agenda[ letter ] = new TrieNode(letter);
- }
- this.agenda[ letter ].add(name, 1);
- }
- countByPrefix(prefix) {
- let letter = prefix[0];
- if ( letter in this.agenda ) {
- return this.agenda[ letter ].countByPrefix(prefix, 1);
- }
- return 0
- }
- }
- let agenda = new Agenda();
- agenda.addContact("s");
- agenda.addContact("ss");
- agenda.addContact("sss");
- agenda.addContact("ssss");
- agenda.addContact("sssss");
- console.log(agenda.countByPrefix("s"))
- console.log(agenda.countByPrefix("ss"))
- console.log(agenda.countByPrefix("sss"))
- console.log(agenda.countByPrefix("ssss"))
- console.log(agenda.countByPrefix("sssss"))
- console.log(agenda.countByPrefix("ssssss"))
- console.log("=====")
- agenda.addContact("hack");
- agenda.addContact("hackerrank");
- console.log(agenda.countByPrefix("hac"))
- console.log(agenda.countByPrefix("hak"))
- console.log(agenda.countByPrefix("hackerrank"))
Add Comment
Please, Sign In to add comment