Bird
Raised Fist0
DSA Typescriptprogramming~5 mins

Prefix Search Using Trie in DSA Typescript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a Trie data structure?
A Trie is a tree-like data structure used to store a dynamic set of strings where keys are usually strings. Each node represents a character, and paths from root to nodes represent prefixes or words.
Click to reveal answer
beginner
How does a Trie help in prefix search?
A Trie allows quick prefix search by following the path of characters from the root node. If the prefix exists, all words starting with that prefix are found by traversing the subtree from that node.
Click to reveal answer
intermediate
What is the time complexity of searching a prefix in a Trie?
The time complexity is O(m), where m is the length of the prefix. This is because we only traverse nodes corresponding to the prefix characters.
Click to reveal answer
beginner
In a Trie node, what does a boolean flag 'isEndOfWord' represent?
It indicates whether the path from the root to this node forms a complete word stored in the Trie.
Click to reveal answer
intermediate
Why is Trie more efficient than a list for prefix search?
Trie avoids checking every word by branching on characters. It directly follows the prefix path, reducing search time from O(n*m) in a list (n words, m prefix length) to O(m) in a Trie.
Click to reveal answer
What does each node in a Trie typically represent?
AA single character
BA whole word
CA number
DA sentence
What is the main advantage of using a Trie for prefix search?
ASorts words automatically
BFaster prefix lookup by character traversal
CStores numbers efficiently
DUses less memory than arrays
If a prefix does not exist in a Trie, what happens during search?
AReturns the root node
BReturns all words
CThrows an error
DSearch ends early with no matches
What does the 'isEndOfWord' flag in a Trie node indicate?
AEnd of a valid word
BStart of a word
CNode has children
DNode is root
What is the time complexity to insert a word of length m into a Trie?
AO(n)
BO(1)
CO(m)
DO(m*n)
Explain how prefix search works using a Trie data structure.
Think about following the path of characters from root to find prefix matches.
You got /4 concepts.
    Describe the structure of a Trie node and its role in prefix search.
    Focus on what each node holds and how it connects to others.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using a Trie data structure in prefix search?
      easy
      A. To efficiently find all words that start with a given prefix
      B. To sort words alphabetically
      C. To store words in reverse order
      D. To count the total number of words

      Solution

      1. Step 1: Understand Trie usage

        A Trie stores words by their prefixes, allowing quick prefix-based lookups.
      2. Step 2: Identify prefix search goal

        Prefix search means finding all words starting with a given prefix efficiently.
      3. Final Answer:

        To efficiently find all words that start with a given prefix -> Option A
      4. Quick Check:

        Trie = Prefix search [OK]
      Hint: Trie is built for prefix-based fast word retrieval [OK]
      Common Mistakes:
      • Confusing Trie with sorting structure
      • Thinking Trie stores words reversed
      • Assuming Trie counts total words only
      2. Which of the following is the correct TypeScript syntax to define a Trie node with children as a Map and an endOfWord boolean?
      easy
      A. class TrieNode { children: object; endOfWord: string; constructor() { this.children = {}; this.endOfWord = ''; } }
      B. class TrieNode { children: string[]; endOfWord: boolean; constructor() { this.children = []; this.endOfWord = false; } }
      C. class TrieNode { children: Map; endOfWord: boolean; constructor() { this.children = new Map(); this.endOfWord = false; } }
      D. class TrieNode { children: Map; endOfWord: boolean; constructor() { this.children = new Map(); this.endOfWord = false; } }

      Solution

      1. Step 1: Check children type

        Children should be a Map with string keys and TrieNode values for prefix characters.
      2. Step 2: Check endOfWord type

        endOfWord is a boolean indicating if node ends a word.
      3. Final Answer:

        class TrieNode { children: Map; endOfWord: boolean; constructor() { this.children = new Map(); this.endOfWord = false; } } -> Option D
      4. Quick Check:

        Map + boolean endOfWord = class TrieNode { children: Map; endOfWord: boolean; constructor() { this.children = new Map(); this.endOfWord = false; } } [OK]
      Hint: Use Map for children and boolean for endOfWord [OK]
      Common Mistakes:
      • Using array instead of Map for children
      • Using wrong key type in Map
      • Setting endOfWord as string instead of boolean
      3. Given the following TypeScript code snippet, what will be the output of console.log(trie.startsWith('app'))?
      class TrieNode {
        children = new Map();
        endOfWord = false;
      }
      
      class Trie {
        root = new TrieNode();
      
        insert(word: string) {
          let node = this.root;
          for (const char of word) {
            if (!node.children.has(char)) {
              node.children.set(char, new TrieNode());
            }
            node = node.children.get(char)!;
          }
          node.endOfWord = true;
        }
      
        startsWith(prefix: string): boolean {
          let node = this.root;
          for (const char of prefix) {
            if (!node.children.has(char)) return false;
            node = node.children.get(char)!;
          }
          return true;
        }
      }
      
      const trie = new Trie();
      trie.insert('apple');
      trie.insert('app');
      trie.insert('bat');
      medium
      A. true
      B. false
      C. undefined
      D. Error at runtime

      Solution

      1. Step 1: Insert words into Trie

        Words 'apple', 'app', and 'bat' are inserted, so prefix 'app' exists in Trie.
      2. Step 2: Check startsWith method

        Method returns true if prefix characters exist in Trie nodes, which they do for 'app'.
      3. Final Answer:

        true -> Option A
      4. Quick Check:

        Prefix 'app' found = true [OK]
      Hint: If prefix inserted, startsWith returns true [OK]
      Common Mistakes:
      • Confusing startsWith with search for whole word
      • Expecting false if prefix is a word itself
      • Thinking startsWith returns endOfWord status
      4. The following TypeScript code tries to implement a startsWith method for a Trie but always returns false. What is the bug?
      startsWith(prefix: string): boolean {
        let node = this.root;
        for (const char of prefix) {
          if (!node.children.has(char)) return false;
          node = node.children.get(char);
        }
        return false;
      }
      medium
      A. It should check endOfWord before returning
      B. It should use a for loop with index instead of for-of
      C. It should return true after the loop if prefix exists
      D. It should initialize node with a new TrieNode

      Solution

      1. Step 1: Analyze loop behavior

        The loop correctly traverses nodes for each prefix character.
      2. Step 2: Check return statement

        Method returns false always after loop, so never returns true even if prefix found.
      3. Step 3: Fix return logic

        Return true after loop if all prefix chars found.
      4. Final Answer:

        It should return true after the loop if prefix exists -> Option C
      5. Quick Check:

        Return true after loop if prefix found [OK]
      Hint: Return true after loop if prefix nodes exist [OK]
      Common Mistakes:
      • Returning false at end regardless
      • Checking endOfWord unnecessarily
      • Incorrect node initialization
      5. You want to extend a Trie to return all words starting with a given prefix. Which approach correctly implements this in TypeScript? A) Traverse to prefix node, then recursively collect all words below. B) Store all words in an array and filter by prefix each time. C) Use a hash map to map prefixes to words directly. D) Insert reversed words and search suffixes instead.
      hard
      A. Store all words in an array and filter by prefix each time.
      B. Traverse to prefix node, then recursively collect all words below.
      C. Use a hash map to map prefixes to words directly.
      D. Insert reversed words and search suffixes instead.

      Solution

      1. Step 1: Understand prefix search extension

        To get all words with prefix, first find node matching prefix.
      2. Step 2: Collect words recursively

        From prefix node, recursively traverse children to collect all complete words.
      3. Step 3: Evaluate other options

        Filtering array or hash map is less efficient; reversed words search suffixes, not prefixes.
      4. Final Answer:

        Traverse to prefix node, then recursively collect all words below. -> Option B
      5. Quick Check:

        Recursive traversal from prefix node = Traverse to prefix node, then recursively collect all words below. [OK]
      Hint: Find prefix node, then DFS to collect words [OK]
      Common Mistakes:
      • Filtering all words each time (slow)
      • Using hash map without prefix traversal
      • Confusing prefix with suffix search
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard