📖 Scenario: You work in 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 Rust program that finds the longest common prefix among a list of product codes.
📋 What You'll Learn
Create a vector of strings called product_codes with exact values
Create a variable called prefix to store the longest common prefix
Write a function called longest_common_prefix that takes a vector of strings and returns a string
Print the longest common prefix stored in prefix
💡 Why This Matters
🌍 Real World
Finding common prefixes helps in organizing product codes, file paths, or DNA sequences in real applications.
💼 Career
Understanding string processing and writing clean functions is essential for software development and data processing jobs.
Progress0 / 4 steps
1
Create the list of product codes
Create a vector of strings called product_codes with these exact values: "flower", "flow", "flight"
DSA Rust
Hint
Use vec!["string1".to_string(), "string2".to_string(), ...] to create a vector of strings.
2
Create a variable to hold the prefix
Create a mutable variable called prefix and set it to an empty string ""
DSA Rust
Hint
Use let mut prefix = String::new(); to create an empty mutable string.
3
Write the function to find the longest common prefix
Write a function called longest_common_prefix that takes a vector of strings called strs and returns a String. Implement the logic to find the longest common prefix among all strings in strs. Then call this function with product_codes and assign the result to prefix.
DSA Rust
Hint
Start with the first string as prefix. For each other string, reduce prefix until it matches the start of that string.
4
Print the longest common prefix
Write a println! statement to print the value of prefix
DSA Rust
Hint
Use println!("{}", prefix); to print the prefix.
Practice
(1/5)
1. What does the Longest Common Prefix (LCP) of a list of strings represent?
easy
A. The shortest string in the list
B. The longest substring found anywhere in all strings
C. The longest starting substring common to all strings
D. The last character of the longest string
Solution
Step 1: Understand the prefix concept
A prefix is a substring starting at the beginning of a string.
Step 2: Define longest common prefix
The longest common prefix is the longest substring starting at the beginning that all strings share.
Final Answer:
The longest starting substring common to all strings -> Option C
Quick Check:
Prefix means start of strings = A [OK]
Hint: Focus on start of strings, not anywhere inside [OK]
Common Mistakes:
Confusing prefix with substring anywhere
Choosing shortest string instead of common start
Thinking prefix is the last part of strings
2. Which Rust code snippet correctly initializes a vector of strings for finding the longest common prefix?
easy
A. let words = vec!["flower", "flow", "flight"];
B. let words = ["flower", "flow", "flight"];
C. let words = vec!("flower", "flow", "flight");
D. let words = vec<str>["flower", "flow", "flight"];
In Rust, vec![...] creates a vector with elements inside square brackets.
Step 2: Check syntaxes
vec![...] is correct. [...] without vec! creates an array, not a vector. vec!() uses incorrect parentheses. vec<str>[...] is invalid syntax.
Final Answer:
let words = vec!["flower", "flow", "flight"]; -> Option A
Quick Check:
vec![...] is correct vector syntax [OK]
Hint: Use vec![...] to create vectors in Rust [OK]
Common Mistakes:
Using parentheses instead of square brackets in vec!
Confusing arrays with vectors
Incorrect generic syntax for vec
3. What is the output of this Rust code that finds the longest common prefix?
fn longest_common_prefix(strs: Vec<&str>) -> String {
if strs.is_empty() { return String::new(); }
let mut prefix = strs[0].to_string();
for s in &strs[1..] {
while !s.starts_with(&prefix) {
prefix.pop();
if prefix.is_empty() { return String::new(); }
}
}
prefix
}
fn main() {
let words = vec!["interview", "internet", "internal"];
println!("{}", longest_common_prefix(words));
}
medium
A. "int"
B. "inter"
C. "in"
D. "internal"
Solution
Step 1: Initialize prefix with first string
Prefix starts as "interview".
Step 2: Compare prefix with second string "internet"
"internet".starts_with("interview") is false, so pop last char repeatedly: pop 'w' -> "intervie" (false), pop 'e' -> "intervi" (false), pop 'i' -> "interv" (false), pop 'v' -> "inter" (true, since "internet".starts_with("inter")).
Step 3: Compare prefix "inter" with third string "internal"
"internal".starts_with("inter") is true, so prefix remains "inter".
Final Answer:
"inter" -> Option B
Quick Check:
Common start is "inter" = B [OK]
Hint: Shrink prefix until all strings start with it [OK]
Common Mistakes:
Not shrinking prefix correctly
Assuming full first string is prefix
Confusing substring anywhere with prefix
4. Identify the bug in this Rust function for longest common prefix and select the fix:
fn longest_common_prefix(strs: Vec<&str>) -> String {
if strs.is_empty() { return String::new(); }
let mut prefix = strs[0].to_string();
for s in &strs[1..] {
while !s.starts_with(prefix) {
prefix.pop();
if prefix.is_empty() { return String::new(); }
}
}
prefix
}
medium
A. Change s.starts_with(prefix) to s.starts_with(&prefix)
B. Replace prefix.pop() with prefix.remove(0)
C. Initialize prefix as empty string instead of strs[0]
D. Add a break statement inside the while loop
Solution
Step 1: Identify type mismatch in starts_with
starts_with expects a &str reference, but prefix is String. Passing prefix directly causes type error.
Step 2: Fix by passing reference to prefix
Use &prefix to pass a &str reference, matching function signature.
Final Answer:
Change s.starts_with(prefix) to s.starts_with(&prefix) -> Option A
Quick Check:
Use & prefix for &str parameter [OK]
Hint: Pass &String as &str in starts_with [OK]
Common Mistakes:
Passing String instead of &str to starts_with
Removing first char instead of last char
Not checking empty prefix before popping
5. Given a list of strings, write a Rust function that returns the longest common prefix but ignores case differences (case-insensitive). Which approach is best?
hard
A. Reverse strings and find prefix from the end
B. Compare characters using ASCII values directly
C. Use starts_with without modification
D. Convert all strings to lowercase before finding prefix
Solution
Step 1: Understand case-insensitive comparison
To ignore case, convert all strings to the same case (lowercase or uppercase) before comparison.
Step 2: Apply lowercase conversion before prefix logic
Transform each string to lowercase, then find longest common prefix normally.
Final Answer:
Convert all strings to lowercase before finding prefix -> Option D
Quick Check:
Normalize case first for case-insensitive prefix [OK]
Hint: Normalize case before prefix check [OK]
Common Mistakes:
Comparing characters without case normalization
Using ASCII values without case mapping
Reversing strings which doesn't solve case issue
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.