Bird
Raised Fist0
DSA Javaprogramming~30 mins

Word Search in Trie in DSA Java - Build from Scratch

Choose your learning style10 modes available
Word Search in Trie
📖 Scenario: Imagine you have a list of words and you want to quickly check if a certain word exists in that list. A Trie is a special tree-like data structure that helps you do this efficiently.
🎯 Goal: You will build a simple Trie in Java, insert some words into it, and then search for a specific word to see if it exists.
📋 What You'll Learn
Create a TrieNode class with an array for children and a boolean to mark the end of a word
Create a Trie class with insert and search methods
Insert given words into the Trie
Search for a given word and print if it exists or not
💡 Why This Matters
🌍 Real World
Tries are used in autocomplete features, spell checkers, and IP routing to quickly find words or prefixes.
💼 Career
Understanding Tries helps in roles involving search engines, text processing, and efficient data retrieval.
Progress0 / 4 steps
1
Create TrieNode class
Create a class called TrieNode with a TrieNode[] children array of size 26 and a boolean isEndOfWord initialized to false.
DSA Java
Hint

Think of each TrieNode as a box with 26 slots for letters a to z and a flag to mark if a word ends here.

2
Create Trie class with insert method
Create a class called Trie with a TrieNode root initialized in the constructor. Add a method void insert(String word) that inserts the word into the Trie by creating nodes for each letter and marking the last node's isEndOfWord as true.
DSA Java
Hint

Start from the root and for each letter, go to the child node or create it if missing. Mark the end of the word at the last node.

3
Add search method to Trie
Add a method boolean search(String word) in the Trie class that returns true if the word exists in the Trie and false otherwise. Traverse the Trie nodes for each letter and check isEndOfWord at the end.
DSA Java
Hint

Follow the path for each letter. If any letter node is missing, return false. At the end, check if this node marks the end of a word.

4
Test Trie with insert and search
Create a main method. Create a Trie object. Insert the words "apple", "banana", and "grape". Search for the word "banana" and print "Found" if it exists, otherwise print "Not Found".
DSA Java
Hint

Insert the words first, then search for "banana". Print "Found" if search returns true, else print "Not Found".

Practice

(1/5)
1. What is the main purpose of using a Trie data structure in word search problems?
easy
A. To perform arithmetic operations on words
B. To sort words alphabetically
C. To store words in a linked list
D. To efficiently store and search words by their prefixes

Solution

  1. Step 1: Understand Trie structure

    A Trie stores characters of words in a tree-like structure where each node represents a character.
  2. Step 2: Identify Trie usage in word search

    It allows quick prefix-based search, making it efficient to find words starting with given letters.
  3. Final Answer:

    To efficiently store and search words by their prefixes -> Option D
  4. Quick Check:

    Trie = prefix search [OK]
Hint: Trie is all about prefix-based fast word search [OK]
Common Mistakes:
  • Confusing Trie with sorting data structures
  • Thinking Trie stores words as linked lists
  • Assuming Trie performs arithmetic on words
2. Which of the following is the correct way to declare a Trie node class in Java?
easy
A. class TrieNode { char val; TrieNode[] children = new TrieNode[26]; boolean isWord; }
B. class TrieNode { int val; TrieNode children; boolean isWord; }
C. class TrieNode { String val; TrieNode[] children = new TrieNode[26]; }
D. class TrieNode { char val; List<TrieNode> children; boolean isWord; }

Solution

  1. Step 1: Check data types for Trie node

    Each node stores a character, an array of 26 children for letters a-z, and a boolean to mark word end.
  2. Step 2: Validate options

    class TrieNode { char val; TrieNode[] children = new TrieNode[26]; boolean isWord; } matches this structure exactly with char val, TrieNode[] children of size 26, and boolean isWord.
  3. Final Answer:

    class TrieNode { char val; TrieNode[] children = new TrieNode[26]; boolean isWord; } -> Option A
  4. Quick Check:

    Correct TrieNode declaration = class TrieNode { char val; TrieNode[] children = new TrieNode[26]; boolean isWord; } [OK]
Hint: Trie nodes use char + array of 26 children + boolean flag [OK]
Common Mistakes:
  • Using int or String instead of char for node value
  • Using single child instead of array for children
  • Using List instead of fixed-size array for children
3. What will be the output of the following Java code snippet that inserts words into a Trie and searches for "cat"?
class TrieNode {
  TrieNode[] children = new TrieNode[26];
  boolean isWord = 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.isWord = 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.isWord;
  }
}

public class Main {
  public static void main(String[] args) {
    Trie trie = new Trie();
    trie.insert("cat");
    trie.insert("car");
    System.out.println(trie.search("cat"));
    System.out.println(trie.search("cap"));
  }
}
medium
A. false false
B. true false
C. true true
D. false true

Solution

  1. Step 1: Insert words "cat" and "car" into Trie

    Both words are inserted character by character, marking the last node's isWord as true.
  2. Step 2: Search for "cat" and "cap"

    "cat" exists with isWord true, so search returns true. "cap" path is missing 'p' node, so returns false.
  3. Final Answer:

    true false -> Option B
  4. Quick Check:

    Inserted words found = true, missing word = false [OK]
Hint: Search returns true only if full word path and isWord true [OK]
Common Mistakes:
  • Assuming partial prefix returns true
  • Not marking isWord correctly on insert
  • Confusing character indexing in children array
4. Identify the bug in the following Trie search method and choose the correct fix:
boolean search(String word) {
  TrieNode node = root;
  for (int i = 0; i <= word.length(); i++) {
    int idx = word.charAt(i) - 'a';
    if (node.children[idx] == null) return false;
    node = node.children[idx];
  }
  return node.isWord;
}
medium
A. Initialize idx before loop
B. Return true inside the loop
C. Change loop condition to i < word.length()
D. Remove return statement inside loop

Solution

  1. Step 1: Analyze loop boundary

    The loop runs from i = 0 to i <= word.length(), which causes index out of bounds at last iteration.
  2. Step 2: Fix loop condition

    Changing condition to i < word.length() prevents accessing invalid index and correctly iterates over characters.
  3. Final Answer:

    Change loop condition to i < word.length() -> Option C
  4. Quick Check:

    Loop boundary fix prevents index error [OK]
Hint: Loop over string chars with i < length, not <= length [OK]
Common Mistakes:
  • Using <= instead of < in loop condition
  • Trying to fix by moving idx initialization
  • Removing return inside loop causing wrong logic
5. Given a 2D board of characters and a list of words, which approach best uses a Trie to efficiently find all words present on the board? A sample board:
[
  ['o','a','a','n'],
  ['e','t','a','e'],
  ['i','h','k','r'],
  ['i','f','l','v']
]
Words: ["oath", "pea", "eat", "rain"]
hard
A. Build a Trie from words, then DFS on board checking prefixes in Trie
B. Check each word by scanning entire board without Trie
C. Use a hash set for words and scan board rows only
D. Sort words and board rows, then binary search each word

Solution

  1. Step 1: Build Trie from given words

    Insert all words into a Trie to enable prefix checking during search.
  2. Step 2: Perform DFS on board cells

    From each cell, explore neighbors recursively, checking if current path matches any prefix in Trie to prune search.
  3. Step 3: Collect words found when Trie node marks word end

    This approach efficiently finds all words without redundant searches.
  4. Final Answer:

    Build a Trie from words, then DFS on board checking prefixes in Trie -> Option A
  5. Quick Check:

    Trie + DFS = efficient word search on board [OK]
Hint: Use Trie for prefix pruning during DFS on board [OK]
Common Mistakes:
  • Searching words one by one scanning whole board
  • Ignoring prefix pruning causing slow search
  • Using sorting and binary search which doesn't fit 2D board
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