Count Words with Given Prefix in DSA Python - Time & Space Complexity
We want to know how long it takes to count words that start with a certain prefix.
How does the time grow when we have more words or longer prefixes?
Analyze the time complexity of the following code snippet.
def count_words_with_prefix(words, prefix):
count = 0
for word in words:
if word.startswith(prefix):
count += 1
return count
This code counts how many words in the list start with the given prefix.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Checking each word's start against the prefix.
- How many times: Once for every word in the list.
As the number of words grows, the time to check all words grows roughly the same amount.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 prefix checks |
| 100 | About 100 prefix checks |
| 1000 | About 1000 prefix checks |
Pattern observation: The work grows directly with the number of words.
Time Complexity: O(n * k)
This means the time grows with the number of words n and the length of the prefix k.
[X] Wrong: "Checking prefix is always O(1) time."
[OK] Correct: Checking prefix compares characters one by one, so it takes time proportional to the prefix length.
Understanding how prefix checks scale helps you explain and improve search operations in real applications.
What if we used a trie (prefix tree) instead of checking each word? How would the time complexity change?
Practice
countWordsStartingWith(words, prefix) do when given a list of words and a prefix?Solution
Step 1: Understand the function purpose
The function is designed to count words that begin with a specific prefix, not just contain it anywhere.Step 2: Compare options with function behavior
Only Counts how many words in the list start with the given prefix correctly describes counting words starting with the prefix. Others describe different behaviors.Final Answer:
Counts how many words in the list start with the given prefix -> Option CQuick Check:
Counting words starting with prefix = Counts how many words in the list start with the given prefix [OK]
- Confusing 'start with' and 'contain' prefix
- Thinking function returns words instead of count
- Assuming it removes words instead of counting
p in a list words?Solution
Step 1: Check syntax correctness
sum(word.startswith(p) = True for word in words) uses '=' inside sum which is invalid syntax for comparison.Step 2: Understand boolean summation
Options B and C incorrectly compare boolean to string'True'(always False). Only sum(word.startswith(p) for word in words) correctly sums booleans directly (True counts as 1).Final Answer:
sum(word.startswith(p) for word in words) -> Option AQuick Check:
Use sum with boolean directly for counting [OK]
- Using '=' instead of '==' for comparison
- Comparing boolean to string 'True'
- Confusing syntax causing errors
words = ['apple', 'app', 'application', 'banana', 'apply'] prefix = 'app' count = sum(word.startswith(prefix) for word in words) print(count)
Solution
Step 1: Identify words starting with 'app'
Words starting with 'app' are 'apple', 'app', 'application', and 'apply' -- total 4 words.Step 2: Calculate sum of True values
Each word starting with prefix counts as 1, so sum is 4.Final Answer:
4 -> Option DQuick Check:
Count words starting with 'app' = 4 [OK]
- Counting words that contain prefix anywhere
- Missing one word that starts with prefix
- Confusing prefix length with word length
def count_prefix(words, prefix):
count = 0
for word in words:
if word.startswith == prefix:
count += 1
return count
words = ['prefix', 'preach', 'prevent', 'post']
prefix = 'pre'
print(count_prefix(words, prefix))Solution
Step 1: Identify incorrect method usage
The code uses 'word.startswith == prefix' which compares method to string, incorrect syntax.Step 2: Correct method call
It should be 'word.startswith(prefix)' to check if word starts with prefix.Final Answer:
Using 'word.startswith == prefix' instead of 'word.startswith(prefix)' -> Option AQuick Check:
Method call needs parentheses with argument [OK]
- Comparing method itself instead of calling it
- Forgetting parentheses after method name
- Mixing variable names in loop
prefixes? Choose the correct code snippet.words = ['cat', 'car', 'dog', 'cart', 'cow'] prefixes = ['ca', 'do', 'co']
Solution
Step 1: Understand requirement for multiple prefixes
We need to check if each word starts with any prefix in the prefixes list.Step 2: Analyze options for correct logic
sum(any(word.startswith(p) for p in prefixes) for word in words) usesany()to correctly check if word starts with any prefix. sum(word.startswith(prefixes[0]) or word.startswith(prefixes[1]) for word in words) only checks first two prefixes (misses 'cow' with 'co'). sum(word.startswith(prefixes) for word in words) passes list tostartswith(TypeError). sum(word.startswith(p) and p in prefixes for word in words) uses unboundpand incorrectandlogic.Final Answer:
sum(any(word.startswith(p) for p in prefixes) for word in words) -> Option BQuick Check:
Use any() to check multiple prefixes per word [OK]
- Passing list directly to startswith instead of iterating
- Using 'and' instead of 'or' logic
- Hardcoding prefix checks instead of looping
Ready to prove it?
Pass the test and this pattern moves unknown
