Bird
Raised Fist0
DSA Goprogramming~10 mins

Autocomplete System with Trie in DSA Go - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a new Trie node.

DSA Go
func NewTrieNode() *TrieNode {
    return &TrieNode{
        children: make(map[rune]*TrieNode),
        isEnd:    [1],
    }
}
Drag options to blanks, or click blank then click option'
A0
Btrue
Cnil
Dfalse
Attempts:
3 left
💡 Hint
Common Mistakes
Setting isEnd to true for new nodes
Using nil instead of a boolean value
2fill in blank
medium

Complete the code to insert a word into the Trie.

DSA Go
func (t *Trie) Insert(word string) {
    node := t.root
    for _, ch := range word {
        if node.children[ch] == nil {
            node.children[ch] = NewTrieNode()
        }
        node = node.children[[1]]
    }
    node.isEnd = true
}
Drag options to blanks, or click blank then click option'
Ach
Bword
Cnode
Dt
Attempts:
3 left
💡 Hint
Common Mistakes
Using the whole word instead of the character
Using the node variable instead of the character
3fill in blank
hard

Fix the error in the search function to check if a word exists in the Trie.

DSA Go
func (t *Trie) Search(word string) bool {
    node := t.root
    for _, ch := range word {
        if node.children[ch] == nil {
            return false
        }
        node = node.children[ch]
    }
    return node.[1]
}
Drag options to blanks, or click blank then click option'
Achildren
Broot
CisEnd
Dword
Attempts:
3 left
💡 Hint
Common Mistakes
Returning children instead of isEnd
Returning root or word which are not boolean flags
4fill in blank
hard

Fill both blanks to collect all words starting with a prefix using DFS.

DSA Go
func (t *Trie) collectWords(node *TrieNode, prefix string, results *[]string) {
    if node.[1] {
        *results = append(*results, prefix)
    }
    for ch, child := range node.[2] {
        t.collectWords(child, prefix+string(ch), results)
    }
}
Drag options to blanks, or click blank then click option'
AisEnd
Broot
Cchildren
Dword
Attempts:
3 left
💡 Hint
Common Mistakes
Using root instead of children for traversal
Checking children instead of isEnd for word completion
5fill in blank
hard

Fill all three blanks to implement the Autocomplete function returning all words with a prefix.

DSA Go
func (t *Trie) Autocomplete(prefix string) []string {
    node := t.root
    for _, ch := range prefix {
        if node.children[[1]] == nil {
            return []string{}
        }
        node = node.children[ch]
    }
    results := []string{}
    t.collectWords(node, [2], &results)
    return [3]
}
Drag options to blanks, or click blank then click option'
Ach
Bprefix
Cresults
Dnode
Attempts:
3 left
💡 Hint
Common Mistakes
Using wrong variable to check children
Passing wrong string to collectWords
Returning node instead of results

Practice

(1/5)
1. What is the main purpose of using a Trie in an autocomplete system?
easy
A. To encrypt the stored words
B. To sort words alphabetically
C. To efficiently store and search prefixes of words
D. To count the total number of words

Solution

  1. Step 1: Understand the role of Trie in prefix search

    A Trie is a tree-like data structure that stores characters of words in a way that common prefixes share nodes.
  2. Step 2: Connect Trie usage to autocomplete

    Autocomplete requires quick lookup of words starting with a given prefix, which Trie supports efficiently.
  3. Final Answer:

    To efficiently store and search prefixes of words -> Option C
  4. Quick Check:

    Trie = prefix search [OK]
Hint: Trie stores prefixes for fast autocomplete lookup [OK]
Common Mistakes:
  • Thinking Trie sorts words alphabetically
  • Confusing Trie with encryption methods
  • Assuming Trie counts total words only
2. Which of the following is the correct way to declare a Trie node struct in Go?
easy
A. type TrieNode struct { children []int; isEnd int }
B. type TrieNode struct { children map[rune]*TrieNode; isEnd bool }
C. type TrieNode struct { children map[string]int; isEnd string }
D. type TrieNode struct { children []string; isEnd bool }

Solution

  1. Step 1: Identify correct data types for TrieNode fields

    Children should map characters (rune) to child nodes (pointer to TrieNode). isEnd should be a boolean indicating word end.
  2. Step 2: Match with given options

    type TrieNode struct { children map[rune]*TrieNode; isEnd bool } uses map[rune]*TrieNode and bool for isEnd, which is correct for Trie implementation in Go.
  3. Final Answer:

    type TrieNode struct { children map[rune]*TrieNode; isEnd bool } -> Option B
  4. Quick Check:

    Children map[rune]*TrieNode and bool isEnd [OK]
Hint: Children map keys are runes, values are pointers to TrieNode [OK]
Common Mistakes:
  • Using slices instead of maps for children
  • Using incorrect types like int or string for isEnd
  • Mapping children with wrong key or value types
3. What will be the output of the following Go code snippet that inserts words into a Trie and searches for prefix "app"?
trie := NewTrie()
trie.Insert("apple")
trie.Insert("app")
trie.Insert("application")
results := trie.SearchPrefix("app")
fmt.Println(results)
Assuming SearchPrefix returns all words starting with the prefix.
medium
A. []
B. ["apple", "application"]
C. ["app"]
D. ["app", "apple", "application"]

Solution

  1. Step 1: Insert words into Trie

    Words "apple", "app", and "application" are inserted, all sharing prefix "app".
  2. Step 2: Search for prefix "app"

    SearchPrefix returns all words starting with "app", so it returns all three inserted words.
  3. Final Answer:

    ["app", "apple", "application"] -> Option D
  4. Quick Check:

    All words with prefix "app" returned [OK]
Hint: SearchPrefix returns all words starting with given prefix [OK]
Common Mistakes:
  • Returning only exact prefix word
  • Missing some words sharing prefix
  • Returning empty list incorrectly
4. Identify the bug in this Go code snippet for inserting a word into a Trie:
func (t *Trie) Insert(word string) {
    node := t.root
    for _, ch := range word {
        if node.children[ch] == nil {
            node.children[ch] = &TrieNode{}
        }
        node = node.children[ch]
    }
    node.isEnd = false
}
medium
A. isEnd should be set to true after insertion
B. children map is not initialized
C. Loop variable ch should be int, not rune
D. Function should return a value

Solution

  1. Step 1: Review isEnd assignment after insertion

    After inserting a word, isEnd should mark the node as end of a word, so it must be set to true.
  2. Step 2: Check other parts of code

    children map initialization and loop variable type are correct; function does not need to return a value.
  3. Final Answer:

    isEnd should be set to true after insertion -> Option A
  4. Quick Check:

    isEnd = true after insert [OK]
Hint: Set isEnd true to mark word end [OK]
Common Mistakes:
  • Setting isEnd to false instead of true
  • Not initializing children map before use
  • Expecting Insert to return a value
5. Given a Trie storing words, how can you modify the autocomplete system to return suggestions sorted by frequency of word usage?
hard
A. Store a frequency count at each end node and sort results by this count
B. Sort all words alphabetically before insertion
C. Use a separate array to store frequencies unrelated to Trie
D. Ignore frequency and return words in insertion order

Solution

  1. Step 1: Add frequency tracking in Trie nodes

    Modify Trie nodes to store frequency count at nodes marking word ends to track usage.
  2. Step 2: Sort autocomplete results by frequency

    When returning suggestions, sort collected words by their stored frequency counts to prioritize popular words.
  3. Final Answer:

    Store a frequency count at each end node and sort results by this count -> Option A
  4. Quick Check:

    Frequency count in Trie nodes enables sorted suggestions [OK]
Hint: Track frequency in nodes, sort suggestions by count [OK]
Common Mistakes:
  • Sorting words before insertion does not help frequency
  • Using unrelated arrays breaks Trie efficiency
  • Ignoring frequency loses popular word priority
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