Bird
Raised Fist0
DSA Javaprogramming~20 mins

Prefix Search Using Trie in DSA Java - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Prefix Search Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Prefix Search Result
What is the output of the following Java code that inserts words into a Trie and searches for words with a given prefix?
DSA Java
class TrieNode {
    TrieNode[] children = new TrieNode[26];
    boolean isEnd = false;
}

class Trie {
    TrieNode root = new TrieNode();

    void insert(String word) {
        TrieNode node = root;
        for (char c : word.toCharArray()) {
            int idx = c - 'a';
            if (node.children[idx] == null) {
                node.children[idx] = new TrieNode();
            }
            node = node.children[idx];
        }
        node.isEnd = true;
    }

    boolean startsWith(String prefix) {
        TrieNode node = root;
        for (char c : prefix.toCharArray()) {
            int idx = c - 'a';
            if (node.children[idx] == null) return false;
            node = node.children[idx];
        }
        return true;
    }
}

public class Main {
    public static void main(String[] args) {
        Trie trie = new Trie();
        trie.insert("apple");
        trie.insert("app");
        trie.insert("bat");
        trie.insert("bath");
        System.out.println(trie.startsWith("app"));
        System.out.println(trie.startsWith("bat"));
        System.out.println(trie.startsWith("bath"));
        System.out.println(trie.startsWith("batman"));
    }
}
A
true
true
true
false
B
true
true
false
false
C
false
true
true
false
D
true
false
true
false
Attempts:
2 left
💡 Hint
Check if the prefix exists by traversing the Trie nodes for each character.
🧠 Conceptual
intermediate
1:00remaining
Number of Children in Trie Node
In a Trie node designed for lowercase English letters, how many children pointers does each node have?
A128
B26
C10
D52
Attempts:
2 left
💡 Hint
Think about the number of lowercase English alphabets.
🔧 Debug
advanced
1:30remaining
Identify the Bug in Trie Insert Method
What error will occur when running the following insert method in a Trie if the input word contains uppercase letters?
DSA Java
void insert(String word) {
    TrieNode node = root;
    for (char c : word.toCharArray()) {
        int idx = c - 'a';
        if (node.children[idx] == null) {
            node.children[idx] = new TrieNode();
        }
        node = node.children[idx];
    }
    node.isEnd = true;
}
AArrayIndexOutOfBoundsException
BNullPointerException
CNo error, works fine
DClassCastException
Attempts:
2 left
💡 Hint
Check how the index is calculated for uppercase letters.
🚀 Application
advanced
2:00remaining
Count Words with Given Prefix Using Trie
Given a Trie with inserted words, which approach correctly counts how many words start with a given prefix?
AReturn the number of children of the root node.
BCount all nodes in the Trie regardless of prefix.
CTraverse to the prefix node, then recursively count all nodes marked as word ends in its subtree.
DCount only the prefix node without checking descendants.
Attempts:
2 left
💡 Hint
Think about how to find all words starting with the prefix.
❓ Predict Output
expert
2:30remaining
Output of Trie Search After Multiple Inserts
What is the output of the following Java code that inserts words and searches for prefixes?
DSA Java
class TrieNode {
    TrieNode[] children = new TrieNode[26];
    boolean isEnd = false;
}

class Trie {
    TrieNode root = new TrieNode();

    void insert(String word) {
        TrieNode node = root;
        for (char c : word.toCharArray()) {
            int idx = c - 'a';
            if (node.children[idx] == null) {
                node.children[idx] = new TrieNode();
            }
            node = node.children[idx];
        }
        node.isEnd = true;
    }

    boolean search(String word) {
        TrieNode node = root;
        for (char c : word.toCharArray()) {
            int idx = c - 'a';
            if (node.children[idx] == null) return false;
            node = node.children[idx];
        }
        return node.isEnd;
    }
}

public class Main {
    public static void main(String[] args) {
        Trie trie = new Trie();
        trie.insert("cat");
        trie.insert("car");
        trie.insert("cart");
        trie.insert("dog");
        System.out.println(trie.search("car"));
        System.out.println(trie.search("cart"));
        System.out.println(trie.search("cat"));
        System.out.println(trie.search("ca"));
        System.out.println(trie.search("dog"));
        System.out.println(trie.search("do"));
    }
}
A
true
true
false
false
true
false
B
true
false
true
false
true
false
C
false
true
true
false
true
false
D
true
true
true
false
true
false
Attempts:
2 left
💡 Hint
Check if the search method returns true only for complete words inserted.

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 numbers in sorted order
D. To perform arithmetic operations quickly

Solution

  1. Step 1: Understand what prefix search means

    Prefix search means finding all words that start with a certain beginning sequence of letters.
  2. Step 2: Understand Trie's role in prefix search

    A Trie stores words in a tree where each node represents a letter, making it easy to find all words sharing the same prefix by traversing the tree.
  3. Final Answer:

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

    Prefix search = efficient word lookup [OK]
Hint: Trie nodes represent letters for fast prefix lookup [OK]
Common Mistakes:
  • Confusing Trie with sorting data structures
  • Thinking Trie is for arithmetic operations
  • Assuming Trie stores numbers only
2. Which of the following is the correct way to declare a Trie node class in Java?
easy
A. class TrieNode { int[] children = new int[26]; boolean isEndOfWord; }
B. class TrieNode { char[] children = new char[26]; boolean isEndOfWord; }
C. class TrieNode { String[] children = new String[26]; boolean isEndOfWord; }
D. class TrieNode { TrieNode[] children = new TrieNode[26]; boolean isEndOfWord; }

Solution

  1. Step 1: Identify the correct type for children nodes

    Each child should be a reference to another TrieNode, so the array type must be TrieNode[].
  2. Step 2: Check the other parts of the class

    Boolean isEndOfWord marks if the node ends a word, which is correct in class TrieNode { TrieNode[] children = new TrieNode[26]; boolean isEndOfWord; }.
  3. Final Answer:

    class TrieNode { TrieNode[] children = new TrieNode[26]; boolean isEndOfWord; } -> Option D
  4. Quick Check:

    Children are TrieNode references [OK]
Hint: Children array holds TrieNode references, not primitives [OK]
Common Mistakes:
  • Using int or char arrays instead of TrieNode array
  • Using String array for children
  • Forgetting to mark end of word
3. Given the following code snippet, what will be the output?
Trie trie = new Trie();
trie.insert("cat");
trie.insert("car");
trie.insert("dog");
System.out.println(trie.startsWith("ca"));
System.out.println(trie.startsWith("do"));
System.out.println(trie.startsWith("bat"));
medium
A. true true false
B. true false false
C. false true false
D. false false true

Solution

  1. Step 1: Insert words into the Trie

    Words "cat", "car", and "dog" are inserted, so prefixes "ca" and "do" exist in the Trie.
  2. Step 2: Check startsWith results

    startsWith("ca") returns true because "cat" and "car" start with "ca".
    startsWith("do") returns true because "dog" starts with "do".
    startsWith("bat") returns false because no word starts with "bat".
  3. Final Answer:

    true true false -> Option A
  4. Quick Check:

    Prefix "ca" and "do" found, "bat" not found [OK]
Hint: Check inserted words' prefixes carefully [OK]
Common Mistakes:
  • Assuming startsWith returns false if word not complete
  • Confusing startsWith with search for whole word
  • Mixing up true/false outputs
4. The following Java method is intended to check if a prefix exists in a Trie, but it has a bug. What is the bug?
public boolean startsWith(String prefix) {
    TrieNode node = root;
    for (int i = 0; i <= prefix.length(); i++) {
        char c = prefix.charAt(i);
        if (node.children[c - 'a'] == null) return false;
        node = node.children[c - 'a'];
    }
    return true;
}
medium
A. The root node is not initialized before the loop
B. The loop condition should be < instead of <= to avoid IndexOutOfBoundsException
C. The method should return false at the end instead of true
D. The character indexing is wrong; should use c + 'a'

Solution

  1. Step 1: Analyze the for-loop condition

    The loop runs from i = 0 to i <= prefix.length(), which means it tries to access prefix.charAt(prefix.length()), causing an IndexOutOfBoundsException.
  2. Step 2: Correct the loop condition

    The loop should run while i < prefix.length() to access valid characters only.
  3. Final Answer:

    The loop condition should be < instead of <= to avoid IndexOutOfBoundsException -> Option B
  4. Quick Check:

    Loop index must be less than length [OK]
Hint: Loop index must be less than string length [OK]
Common Mistakes:
  • Using <= instead of < in loop condition
  • Incorrect character arithmetic
  • Returning wrong boolean at the end
5. You want to find all words in a Trie that start with the prefix "app". Which approach correctly retrieves all such words?
hard
A. Use a hash map to store all words and filter those starting with "app"
B. Search each word in the Trie individually to check if it starts with "app"
C. Traverse the Trie to the node representing 'p' in "app", then perform a depth-first search collecting all words below
D. Insert "app" as a word and then search for it

Solution

  1. Step 1: Locate the prefix node in the Trie

    Traverse the Trie following letters 'a', 'p', 'p' to reach the node representing the last 'p' in "app".
  2. Step 2: Collect all words below this node

    Perform a depth-first search (DFS) from this node to find all complete words that start with "app".
  3. Final Answer:

    Traverse the Trie to the node representing 'p' in "app", then perform a depth-first search collecting all words below -> Option C
  4. Quick Check:

    Prefix node + DFS = all matching words [OK]
Hint: Find prefix node, then DFS to collect words [OK]
Common Mistakes:
  • Checking all words instead of using Trie structure
  • Using hash map instead of Trie traversal
  • Confusing insertion with 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