What is the Longest Common Prefix (LCP) in a list of strings?
The Longest Common Prefix is the longest starting substring that is common to all strings in the list. For example, for ["flower", "flow", "flight"], the LCP is "fl".
Click to reveal answer
beginner
How do you find the Longest Common Prefix by comparing characters vertically?
You compare characters of all strings at the same index one by one. Stop when a mismatch or end of any string is found. The prefix up to that point is the LCP.
Click to reveal answer
intermediate
What is the time complexity of the vertical scanning approach for Longest Common Prefix?
The time complexity is O(S), where S is the sum of all characters in all strings. This is because each character is compared at most once.
Click to reveal answer
intermediate
Explain the divide and conquer approach for Longest Common Prefix.
Divide the list into two halves, find the LCP of each half recursively, then find the common prefix of these two results. Repeat until the whole list is processed.
Click to reveal answer
beginner
What is a simple base case when implementing Longest Common Prefix recursively?
If the list has only one string, the LCP is that string itself. If the list is empty, the LCP is an empty string.
Click to reveal answer
What is the Longest Common Prefix of ["dog", "racecar", "car"]?
A"d"
B"" (empty string)
C"car"
D"do"
✗ Incorrect
There is no common starting substring among all strings, so the LCP is an empty string.
Which approach compares characters of all strings at the same index one by one?
ADivide and conquer
BHorizontal scanning
CVertical scanning
DBinary search
✗ Incorrect
Vertical scanning compares characters vertically at each index across all strings.
If the input list has only one string, what is the Longest Common Prefix?
AEmpty string
BUndefined
CFirst character of the string
DThe string itself
✗ Incorrect
With only one string, the LCP is the string itself.
What is the worst-case time complexity of the Longest Common Prefix problem using vertical scanning?
AO(S), where S is total characters
BO(log n)
CO(n^2)
DO(n)
✗ Incorrect
Vertical scanning compares each character once, so complexity depends on total characters.
In divide and conquer for LCP, what do you do after finding LCPs of two halves?
AFind common prefix of the two LCPs
BConcatenate both LCPs
CReturn the longer LCP
DDiscard one LCP
✗ Incorrect
You find the common prefix of the two halves' LCPs to get the overall LCP.
Describe how to find the Longest Common Prefix using vertical scanning.
Think about checking columns of characters one by one.
You got /3 concepts.
Explain the divide and conquer method to find the Longest Common Prefix.
Divide the problem into smaller parts and combine.
You got /4 concepts.
Practice
(1/5)
1. What does the Longest Common Prefix (LCP) of a list of strings represent?
easy
A. The longest starting substring common to all strings
B. The longest ending substring common to all strings
C. The longest substring found anywhere in all strings
D. The shortest string in the list
Solution
Step 1: Understand the prefix concept
A prefix is a substring at the start of a string.
Step 2: Define longest common prefix
The LCP is the longest substring starting from the beginning that all strings share.
Final Answer:
The longest starting substring common to all strings -> Option A
Quick Check:
Prefix means start of string = B [OK]
Hint: Focus on the start of strings to find common parts [OK]
Common Mistakes:
Confusing prefix with suffix
Looking for substring anywhere, not just start
Choosing shortest string as prefix
2. Which of the following TypeScript function signatures correctly represents a function to find the longest common prefix of an array of strings?
easy
A. function longestCommonPrefix(strs: string[]): string
B. function longestCommonPrefix(strs: number[]): string
C. function longestCommonPrefix(strs: string): string[]
D. function longestCommonPrefix(strs: string[]): number
Solution
Step 1: Identify input type
The input should be an array of strings, so type is string[].
Step 2: Identify output type
The output is the longest common prefix, a string.
Final Answer:
function longestCommonPrefix(strs: string[]): string -> Option A
Quick Check:
Input array of strings, output string = D [OK]
Hint: Input is string array, output is string prefix [OK]
Common Mistakes:
Using number[] instead of string[]
Returning array instead of string
Passing single string instead of array
3. What is the output of the following TypeScript code?
function longestCommonPrefix(strs: string[]): string {
if (strs.length === 0) return "";
let prefix = strs[0];
for (let i = 1; i < strs.length; i++) {
while (strs[i].indexOf(prefix) !== 0) {
prefix = prefix.substring(0, prefix.length - 1);
if (prefix === "") return "";
}
}
return prefix;
}
console.log(longestCommonPrefix(["flower", "flow", "flight"]));
medium
A. "flow"
B. "fl"
C. "f"
D. "flight"
Solution
Step 1: Initialize prefix and loop through strings
Start with prefix = "flower". Check "flow": prefix "flower" not prefix of "flow", shorten to "flowe", then "flow", which is prefix of "flow".
Step 2: Check next string "flight"
"flow" not prefix of "flight", shorten to "flo", then "fl", which is prefix of "flight".
Final Answer:
"fl" -> Option B
Quick Check:
Common start is "fl" = A [OK]
Hint: Shorten prefix until it matches start of all strings [OK]
Common Mistakes:
Returning first string without checking others
Not shortening prefix correctly
Confusing substring indices
4. Identify the bug in this TypeScript function for longest common prefix:
function longestCommonPrefix(strs: string[]): string {
if (strs.length === 0) return "";
let prefix = strs[0];
for (let i = 1; i <= strs.length; i++) {
while (strs[i].indexOf(prefix) !== 0) {
prefix = prefix.substring(0, prefix.length - 1);
if (prefix === "") return "";
}
}
return prefix;
}
medium
A. Use prefix.includes() instead of indexOf()
B. Prefix should be initialized as empty string
C. Loop condition should be i < strs.length, not i <= strs.length
D. Return type should be string[] instead of string
Solution
Step 1: Check loop boundary
The loop uses i <= strs.length, which causes out-of-bounds access at i = strs.length.
Step 2: Correct loop condition
Change to i < strs.length to avoid accessing undefined element.
Final Answer:
Loop condition should be i < strs.length, not i <= strs.length -> Option C
Quick Check:
Array index out of bounds = C [OK]
Hint: Use < not <= for zero-based array loops [OK]
Common Mistakes:
Off-by-one error in loop condition
Initializing prefix incorrectly
Misusing string methods
5. Given the array ["interview", "interval", "internal", "internet"], what is the longest common prefix? Also, explain why the prefix stops where it does.
hard
A. "inte" because all strings start with these four letters
B. "in" because only first two letters are common
C. "int" because the sixth letter differs in some strings
D. "inter" because all strings start with these five letters
Solution
Step 1: Compare characters one by one
Check each character index across all strings: 'i', 'n', 't', 'e', 'r' are common in all.
Step 2: Identify where mismatch occurs
At index 5, 'v' in "interview" and "interval", but 'n' in "internal" and "internet", so prefix stops at "inter".
Final Answer:
"inter" because all strings start with these five letters -> Option D
Quick Check:
Common start "inter" = B [OK]
Hint: Check each character position until mismatch found [OK]
Common Mistakes:
Assuming prefix is longer than actual common part
Ignoring character positions carefully
Confusing similar but different letters
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.