Bird
Raised Fist0
DSA Rustprogramming~5 mins

Longest Common Prefix in DSA Rust - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
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
intermediate
How does horizontal scanning work to find the Longest Common Prefix?
Horizontal scanning compares prefixes between the first string and each subsequent string, updating the prefix by trimming it until it matches all strings.
Click to reveal answer
intermediate
What is the time complexity of the Longest Common Prefix solution using vertical scanning?
The time complexity is O(S), where S is the sum of all characters in all strings, because it checks each character column-wise until a mismatch is found.
Click to reveal answer
intermediate
Rust code snippet: What does this function do?

fn longest_common_prefix(strs: Vec<String>) -> String {
    if strs.is_empty() { return String::new(); }
    let mut prefix = strs[0].clone();
    for s in &strs[1..] {
        while !s.starts_with(&prefix) {
            prefix.pop();
            if prefix.is_empty() { return String::new(); }
        }
    }
    prefix
}
This Rust function finds the longest common prefix among a list of strings by starting with the first string as prefix and trimming it until all strings start with it.
Click to reveal answer
beginner
Why does the Rust code use prefix.pop() inside the loop?
prefix.pop() removes the last character from the prefix string to shorten it until it matches the start of the current string, helping find the common prefix.
Click to reveal answer
What is the Longest Common Prefix of ["dog", "racecar", "car"]?
A"d"
B"car"
C"" (empty string)
D"do"
In Rust, which method checks if a string starts with a given prefix?
Astarts_with()
Bcontains()
Cends_with()
Dis_prefix()
What happens if the prefix becomes empty during the Longest Common Prefix search?
AThrow an error
BReturn the first string
CReturn the last string
DReturn the empty string as no common prefix exists
Which approach compares characters column-wise to find the Longest Common Prefix?
AVertical scanning
BHorizontal scanning
CDivide and conquer
DBinary search
What is the initial prefix in the Rust Longest Common Prefix function?
AAn empty string
BThe first string in the list
CThe shortest string in the list
DThe last string in the list
Explain how the Longest Common Prefix is found using horizontal scanning in Rust.
Think about checking each string one by one and adjusting the prefix.
You got /4 concepts.
    Describe the role of the starts_with() method in finding the Longest Common Prefix.
    It helps confirm if the current prefix matches the start of each string.
    You got /3 concepts.

      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