Bird
Raised Fist0
DSA Javaprogramming~3 mins

Why Count Words with Given Prefix in DSA Java?

Choose your learning style10 modes available
The Big Idea

What if you could find all words starting with your letters instantly, no matter how big the list?

The Scenario

Imagine you have a huge list of words, like a dictionary, and you want to find out how many words start with a certain set of letters, like "pre". Doing this by checking each word one by one is like looking for friends in a crowd by calling their full names out loud--slow and tiring.

The Problem

Manually scanning every word to check if it starts with the prefix wastes a lot of time, especially if the list is very long. It's easy to make mistakes or miss some words because you have to look at each word fully. This method doesn't scale well and becomes frustrating.

The Solution

Using a smart structure like a Trie (prefix tree) lets you quickly jump to the part where words with the prefix live. It's like having a special directory that groups words by their starting letters, so you don't have to check every word. This makes counting words with a given prefix fast and easy.

Before vs After
✗ Before
int count = 0;
for (String word : words) {
  if (word.startsWith(prefix)) {
    count++;
  }
}
✓ After
int count = trie.countWordsWithPrefix(prefix);
What It Enables

This lets you instantly find how many words share the same beginning, enabling fast search features like autocomplete and spell-check.

Real Life Example

When you type in a search box, the system suggests words starting with what you typed. This is possible because it quickly counts and finds words with that prefix using this method.

Key Takeaways

Manually checking each word for a prefix is slow and error-prone.

Using a Trie structure groups words by prefixes for fast counting.

This method powers quick search suggestions and autocomplete.

Practice

(1/5)
1. What does the problem "Count Words with Given Prefix" ask you to do?
easy
A. Count how many words in a list start with a specific prefix
B. Find the longest word in a list
C. Count the total number of characters in all words
D. Sort the words alphabetically

Solution

  1. Step 1: Understand the prefix concept

    The prefix is the starting part of a word. We need to check if words start with this prefix.
  2. Step 2: Count matching words

    We count all words that begin with the given prefix from the list.
  3. Final Answer:

    Count how many words in a list start with a specific prefix -> Option A
  4. Quick Check:

    Prefix means start of word = Count matching words [OK]
Hint: Focus on words starting exactly with the prefix [OK]
Common Mistakes:
  • Counting words containing prefix anywhere, not just start
  • Confusing prefix with suffix
  • Counting characters instead of words
2. Which of the following Java code snippets correctly checks if a string word starts with a prefix pref?
easy
A. word.endsWith(pref)
B. word.contains(pref)
C. word.equals(pref)
D. word.startsWith(pref)

Solution

  1. Step 1: Recall Java String methods

    Java's startsWith method checks if a string begins with a given prefix.
  2. Step 2: Match method to requirement

    Since we want to check the start, word.startsWith(pref) is correct.
  3. Final Answer:

    word.startsWith(pref) -> Option D
  4. Quick Check:

    startsWith checks prefix = word.startsWith(pref) [OK]
Hint: Use startsWith() to check prefix in Java strings [OK]
Common Mistakes:
  • Using contains() which checks anywhere in string
  • Using equals() which checks full string equality
  • Using endsWith() which checks suffix
3. What is the output of the following Java code?
String[] words = {"apple", "app", "application", "banana"};
String prefix = "app";
int count = 0;
for (String w : words) {
    if (w.startsWith(prefix)) {
        count++;
    }
}
System.out.println(count);
medium
A. 3
B. 1
C. 2
D. 4

Solution

  1. Step 1: Check each word against prefix "app"

    Words starting with "app" are "apple", "app", and "application" (3 words).
  2. Step 2: Count matching words

    Count increments 3 times for these words.
  3. Final Answer:

    3 -> Option A
  4. Quick Check:

    3 words start with "app" = 3 [OK]
Hint: Count words starting with prefix by checking each word [OK]
Common Mistakes:
  • Counting only exact matches
  • Counting words containing prefix anywhere
  • Off-by-one errors in counting
4. The following code is intended to count words starting with a prefix but has a bug. What is the bug?
String[] words = {"cat", "car", "dog", "cart"};
String prefix = "car";
int count = 0;
for (int i = 0; i <= words.length; i++) {
    if (words[i].startsWith(prefix)) {
        count++;
    }
}
System.out.println(count);
medium
A. Prefix variable is not initialized
B. startsWith method is used incorrectly
C. Loop condition should be i < words.length, not i <= words.length
D. Array words is empty

Solution

  1. Step 1: Analyze loop condition

    The loop runs from i = 0 to i <= words.length, which causes an IndexOutOfBoundsException because last index is words.length - 1.
  2. Step 2: Correct loop condition

    Change condition to i < words.length to avoid accessing invalid index.
  3. Final Answer:

    Loop condition should be i < words.length, not i <= words.length -> Option C
  4. Quick Check:

    Array index max is length-1 = fix loop condition [OK]
Hint: Use i < array.length to avoid index errors [OK]
Common Mistakes:
  • Using <= instead of < in loop condition
  • Ignoring array index limits
  • Misusing startsWith method
5. Given a list of words ["tree", "trie", "trigger", "trip", "trick"] and prefix "tri", which Java code snippet correctly counts the words starting with the prefix using streams?
hard
A. int count = Arrays.stream(words).map(w -> w.startsWith(prefix)).count();
B. long count = Arrays.stream(words).filter(w -> w.startsWith(prefix)).count();
C. long count = Arrays.stream(words).filter(w -> w.contains(prefix)).count();
D. int count = Arrays.stream(words).filter(w -> w.endsWith(prefix)).count();

Solution

  1. Step 1: Use stream filter with startsWith

    The filter should keep words starting with the prefix using w.startsWith(prefix).
  2. Step 2: Count filtered words

    Use count() to get the number of matching words. The result is a long type.
  3. Final Answer:

    long count = Arrays.stream(words).filter(w -> w.startsWith(prefix)).count(); -> Option B
  4. Quick Check:

    Filter with startsWith + count() = long count = Arrays.stream(words).filter(w -> w.startsWith(prefix)).count(); [OK]
Hint: Use stream filter with startsWith and count() for prefix count [OK]
Common Mistakes:
  • Using map instead of filter
  • Using contains instead of startsWith
  • Using endsWith instead of startsWith
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