Bird
Raised Fist0
DSA Rustprogramming~10 mins

Longest Common Prefix in DSA Rust - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to start the prefix as the first string in the list.

DSA Rust
let mut prefix = [1][0].clone();
Drag options to blanks, or click blank then click option'
Aarray
Bwords
Clist
Dstrings
Attempts:
3 left
💡 Hint
Common Mistakes
Using a wrong variable name like 'words' or 'list'.
Forgetting to clone the string.
2fill in blank
medium

Complete the code to loop through each string in the list.

DSA Rust
for s in [1].iter() {
Drag options to blanks, or click blank then click option'
Alist
Bwords
Cstrings
Darray
Attempts:
3 left
💡 Hint
Common Mistakes
Using the wrong variable name.
Forgetting to use .iter() for looping.
3fill in blank
hard

Fix the error in the while loop condition to check prefix matching.

DSA Rust
while !s.starts_with(&[1]) {
Drag options to blanks, or click blank then click option'
Aprefix
Bstrings
Cs
Dword
Attempts:
3 left
💡 Hint
Common Mistakes
Using the wrong variable in starts_with.
Not using a reference with &prefix.
4fill in blank
hard

Fill both blanks to shorten the prefix by one character from the end.

DSA Rust
prefix = prefix[1](0..prefix[2]().saturating_sub(1)).to_string();
Drag options to blanks, or click blank then click option'
Achars
Blen
Clength
Dsize
Attempts:
3 left
💡 Hint
Common Mistakes
Using length or size instead of len().
Not using chars() for slicing characters.
5fill in blank
hard

Fill all three blanks to return the prefix or empty string if none.

DSA Rust
if strings.is_empty() {
    return [1].to_string();
}

let mut prefix = strings[0].clone();

for s in strings.iter() {
    while !s.starts_with(&prefix) {
        prefix = prefix[2](0..prefix[3]().saturating_sub(1)).to_string();
        if prefix.is_empty() {
            return String::new();
        }
    }
}
prefix
Drag options to blanks, or click blank then click option'
AString::new()
Bchars
Clen
DNone
Attempts:
3 left
💡 Hint
Common Mistakes
Returning None instead of empty string.
Using wrong methods for slicing 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

  1. Step 1: Understand the prefix concept

    A prefix is a substring starting at the beginning of a string.
  2. Step 2: Define longest common prefix

    The longest common prefix is the longest substring starting at the beginning that all strings share.
  3. Final Answer:

    The longest starting substring common to all strings -> Option C
  4. 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"];

Solution

  1. Step 1: Identify correct vector initialization syntax

    In Rust, vec![...] creates a vector with elements inside square brackets.
  2. Step 2: Check syntaxes

    vec![...] is correct. [...] without vec! creates an array, not a vector. vec!() uses incorrect parentheses. vec<str>[...] is invalid syntax.
  3. Final Answer:

    let words = vec!["flower", "flow", "flight"]; -> Option A
  4. 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

  1. Step 1: Initialize prefix with first string

    Prefix starts as "interview".
  2. 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")).
  3. Step 3: Compare prefix "inter" with third string "internal"

    "internal".starts_with("inter") is true, so prefix remains "inter".
  4. Final Answer:

    "inter" -> Option B
  5. 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

  1. Step 1: Identify type mismatch in starts_with

    starts_with expects a &str reference, but prefix is String. Passing prefix directly causes type error.
  2. Step 2: Fix by passing reference to prefix

    Use &prefix to pass a &str reference, matching function signature.
  3. Final Answer:

    Change s.starts_with(prefix) to s.starts_with(&prefix) -> Option A
  4. 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

  1. Step 1: Understand case-insensitive comparison

    To ignore case, convert all strings to the same case (lowercase or uppercase) before comparison.
  2. Step 2: Apply lowercase conversion before prefix logic

    Transform each string to lowercase, then find longest common prefix normally.
  3. Final Answer:

    Convert all strings to lowercase before finding prefix -> Option D
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard