📖 Scenario: Imagine you work for a company that manages a list of product codes. You want to find the longest common starting part (prefix) shared by all product codes to help organize them better.
🎯 Goal: Build a program that finds the longest common prefix string among a list of product codes.
📋 What You'll Learn
Create an array of strings with exact product codes
Create a variable to hold the length of the array
Write a function to find the longest common prefix among the strings
Print the longest common prefix found
💡 Why This Matters
🌍 Real World
Finding common prefixes helps in organizing product codes, file paths, or DNA sequences by their shared starting parts.
💼 Career
Understanding string manipulation and prefix finding is useful in software development, especially in search engines, autocomplete features, and data compression.
Progress0 / 4 steps
1
Create the product codes array
Create a char* array called products with these exact entries: "flower", "flow", "flight".
DSA C
Hint
Use an array of pointers to strings in C.
2
Create the products count variable
Create an int variable called productsCount and set it to 3.
DSA C
Hint
Count how many product codes are in the array.
3
Write the longest common prefix function
Write a function called longestCommonPrefix that takes char* products[] and int productsCount as parameters and returns a char*. Implement logic to find the longest common prefix among the strings.
DSA C
Hint
Compare characters of the first string with others until mismatch or end.
4
Print the longest common prefix
Call longestCommonPrefix(products, productsCount) and print the returned prefix using printf.
DSA C
Hint
Use printf("%s\n", prefix); to print the prefix.
Practice
(1/5)
1. What does the Longest Common Prefix (LCP) problem ask for when given an array of strings?
easy
A. The longest ending substring common to all strings
B. The longest substring common to any two strings
C. The longest starting substring common to all strings
D. The shortest string in the array
Solution
Step 1: Understand the problem definition
The Longest Common Prefix means the longest substring starting from the beginning that is shared by all strings in the array.
Step 2: Compare options with definition
Only The longest starting substring common to all strings matches this definition exactly. Options A and C talk about suffix or any substring, and D is unrelated.
Final Answer:
The longest starting substring common to all strings -> Option C
Quick Check:
Longest Common Prefix = longest starting substring [OK]
Hint: Focus on the start of strings for common parts [OK]
Common Mistakes:
Confusing prefix with suffix
Thinking about any substring instead of prefix
Choosing shortest string instead of prefix
2. Which of the following C code snippets correctly initializes a variable to store the longest common prefix length?
easy
A. int lcp_length = 0;
B. char lcp_length = '';
C. int lcp_length = NULL;
D. string lcp_length = 0;
Solution
Step 1: Identify correct data type for prefix length
The length of a prefix is a number, so it should be stored in an integer variable.
Step 2: Check initialization syntax
int lcp_length = 0; correctly declares an int and initializes it to 0. char lcp_length = ''; uses char with invalid empty quotes, C uses NULL which is for pointers, and D uses string which is not a C type.
Final Answer:
int lcp_length = 0; -> Option A
Quick Check:
Prefix length is an integer initialized to zero [OK]
Hint: Use int for lengths, not char or string [OK]
Common Mistakes:
Using char for numeric length
Assigning NULL to int variable
Using non-C types like string
3. What is the output of the following C code snippet that finds the longest common prefix length?
char *strs[] = {"flower", "flow", "flight"};
int i = 0;
while (strs[0][i] && strs[1][i] && strs[2][i] && strs[0][i] == strs[1][i] && strs[1][i] == strs[2][i]) {
i++;
}
printf("%d", i);
medium
A. 4
B. 2
C. 3
D. 0
Solution
Step 1: Compare characters at each index
Index 0: 'f' == 'f' == 'f' (true), index 1: 'l' == 'l' == 'l' (true), index 2: 'o' == 'o' == 'i' (false)
Step 2: Count matching prefix length
Matching characters are at indices 0 and 1 only, so length is 2.
Final Answer:
2 -> Option B
Quick Check:
Matching prefix length = 2 [OK]
Hint: Check characters index by index until mismatch [OK]
Common Mistakes:
Counting beyond first mismatch
Confusing index with length
Ignoring all strings in comparison
4. Identify the bug in this C code snippet that tries to find the longest common prefix of an array of strings:
int longestCommonPrefix(char **strs, int strsSize) {
int i = 0;
while (strs[0][i]) {
for (int j = 1; j < strsSize; j++) {
if (strs[j][i] != strs[0][i])
return i;
}
i++;
}
return i;
}
medium
A. Does not initialize i before use
B. Returns i too early inside the loop
C. Uses wrong loop variable in inner loop
D. Does not check if strs[j][i] is null before comparison
Solution
Step 1: Analyze character comparison in inner loop
The code compares strs[j][i] with strs[0][i] but does not check if strs[j][i] is '\0' (string end).
Step 2: Understand consequence of missing null check
If strs[j] is shorter than strs[0], accessing strs[j][i] beyond its length causes undefined behavior or wrong result.
Final Answer:
Does not check if strs[j][i] is null before comparison -> Option D
Quick Check:
Check string length before comparing characters [OK]
Hint: Always check string end before character compare [OK]
Common Mistakes:
Ignoring string length in loops
Returning too early without full check
Using wrong loop indices
5. Given an array of strings ["interview", "interval", "internal", "internet"], which of the following C code snippets correctly returns the longest common prefix string?
hard
A. int i = 0;
while (1) {
char c = strs[0][i];
if (c == '\0') break;
for (int j = 1; j < strsSize; j++) {
if (strs[j][i] != c || strs[j][i] == '\0')
goto end;
}
i++;
}
end:
char *prefix = malloc(i + 1);
strncpy(prefix, strs[0], i);
prefix[i] = '\0';
return prefix;
B. int i = 0;
while (strs[0][i]) {
for (int j = 1; j < strsSize; j++) {
if (strs[j][i] != strs[0][i])
break;
}
i++;
}
char *prefix = malloc(i + 1);
strncpy(prefix, strs[0], i);
prefix[i] = '\0';
return prefix;
C. int i = 0;
while (strs[0][i]) {
for (int j = 1; j < strsSize; j++) {
if (strs[j][i] != strs[0][i])
return NULL;
}
i++;
}
return strs[0];
D. int i = 0;
while (strs[0][i]) {
for (int j = 1; j < strsSize; j++) {
if (strs[j][i] != strs[0][i])
return "";
}
i++;
}
return strs[0];
Solution
Step 1: Check loop and character comparison logic
The correct code uses while(1) with break if strs[0][i] == '\0', caches c = strs[0][i], and for each j checks strs[j][i] != c || strs[j][i] == '\0' then goto end before i++. This stops exactly at the first mismatch or shorter string.
Step 2: Verify prefix extraction and return
After loop, malloc(i + 1), strncpy(prefix, strs[0], i), prefix[i] = '\0', return prefix. This creates and returns the new prefix string correctly.
Final Answer:
Uses while(1), goto on mismatch/null, malloc/strncpy new prefix -> Option A
Quick Check:
Check all strings char by char, then copy prefix [OK]
Hint: Use memory copy after finding prefix length [OK]
Common Mistakes:
Not handling string ends properly
Returning original string instead of prefix
Not allocating memory for prefix
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.