Bird
Raised Fist0
DSA C#programming~5 mins

Longest Common Substring in DSA C# - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the Longest Common Substring problem?
It is the problem of finding the longest sequence of characters that appears in the same order and contiguously in two given strings.
Click to reveal answer
intermediate
Which data structure is commonly used to solve the Longest Common Substring problem efficiently?
A 2D array (dynamic programming table) is used to store lengths of common suffixes of substrings ending at different positions in the two strings.
Click to reveal answer
intermediate
In the dynamic programming approach, what does the cell dp[i][j] represent?
dp[i][j] represents the length of the longest common suffix of substrings ending at index i-1 in the first string and j-1 in the second string.
Click to reveal answer
beginner
What is the time complexity of the dynamic programming solution for Longest Common Substring?
The time complexity is O(m * n), where m and n are the lengths of the two input strings.
Click to reveal answer
intermediate
How do you update the dp table when characters at positions i-1 and j-1 in the two strings match?
If characters match, dp[i][j] = dp[i-1][j-1] + 1; otherwise, dp[i][j] = 0.
Click to reveal answer
What does the Longest Common Substring problem find?
ALongest sequence of characters appearing in only one string
BLongest sequence of characters appearing anywhere in both strings
CLongest sequence of characters appearing contiguously in both strings
DLongest sequence of characters appearing in reverse order
What is the initial value of dp[i][j] when characters do not match?
A0
Bdp[i][j-1]
C1
Ddp[i-1][j-1] + 1
Which of these best describes dp[i][j] in the Longest Common Substring DP table?
ANumber of matching characters so far
BLength of longest common prefix ending at i and j
CLength of longest substring anywhere in strings
DLength of longest common suffix ending at i-1 and j-1
What is the time complexity of the DP solution for Longest Common Substring?
AO(m * n)
BO(m + n)
CO(m^2 * n^2)
DO(log(m * n))
If the longest common substring length is stored in maxLen, how do you find the substring itself?
ASubstring is always at the start of the strings
BUse maxLen and the index where maxLen was updated to extract substring from one string
CUse maxLen to count characters in both strings
DSubstring is the entire string
Explain how dynamic programming is used to solve the Longest Common Substring problem.
Think about how to build solutions for smaller substrings to solve bigger ones.
You got /5 concepts.
    Describe the difference between Longest Common Substring and Longest Common Subsequence.
    Focus on whether characters must be next to each other or not.
    You got /5 concepts.

      Practice

      (1/5)
      1. What does the Longest Common Substring problem find between two strings?
      easy
      A. The longest sequence of characters that appear consecutively in both strings
      B. The longest sequence of characters that appear anywhere in both strings, not necessarily consecutively
      C. The total number of common characters between two strings
      D. The longest string formed by combining both strings

      Solution

      1. Step 1: Understand the problem definition

        The Longest Common Substring problem looks for the longest sequence of characters that appear in both strings without any gaps.
      2. Step 2: Differentiate from similar problems

        Unlike Longest Common Subsequence, substrings must be continuous in both strings.
      3. Final Answer:

        The longest sequence of characters that appear consecutively in both strings -> Option A
      4. Quick Check:

        Longest Common Substring = consecutive matching characters [OK]
      Hint: Look for continuous matching characters in both strings [OK]
      Common Mistakes:
      • Confusing substring with subsequence
      • Thinking characters can be non-continuous
      • Counting total common characters instead of longest sequence
      2. Which of the following C# code snippets correctly initializes a 2D array for dynamic programming in Longest Common Substring?
      easy
      A. int[][] dp = new int[m][n];
      B. int[,] dp = new int[m][n];
      C. int[,] dp = new int[m + 1, n + 1];
      D. int[][] dp = new int[m + 1, n + 1];

      Solution

      1. Step 1: Recall C# syntax for 2D arrays

        In C#, a rectangular 2D array is declared as int[,] with sizes specified in new int[m + 1, n + 1].
      2. Step 2: Check each option

        int[,] dp = new int[m + 1, n + 1]; uses correct syntax. Options A and D mix jagged and rectangular array syntax incorrectly. int[,] dp = new int[m][n]; uses wrong initialization syntax.
      3. Final Answer:

        int[,] dp = new int[m + 1, n + 1]; -> Option C
      4. Quick Check:

        Rectangular 2D array syntax = int[,] dp = new int[m + 1, n + 1]; [OK]
      Hint: Use int[,] for 2D arrays, not jagged arrays for DP [OK]
      Common Mistakes:
      • Using jagged array syntax incorrectly
      • Missing +1 for boundary conditions
      • Mixing rectangular and jagged array syntax
      3. What is the output of the following C# code snippet?
      string s1 = "abcde";
      string s2 = "abfde";
      int m = s1.Length;
      int n = s2.Length;
      int[,] dp = new int[m + 1, n + 1];
      int maxLen = 0;
      for (int i = 1; i <= m; i++) {
      for (int j = 1; j <= n; j++) {
      if (s1[i - 1] == s2[j - 1]) {
      dp[i, j] = dp[i - 1, j - 1] + 1;
      if (dp[i, j] > maxLen) maxLen = dp[i, j];
      } else {
      dp[i, j] = 0;
      }
      }
      }
      Console.WriteLine(maxLen);
      medium
      A. 2
      B. 3
      C. 4
      D. 1

      Solution

      1. Step 1: Trace matching characters between s1 and s2

        Strings: s1 = "abcde", s2 = "abfde". Matching substrings are "ab" at start and "de" at end, both length 2.
      2. Step 2: Identify longest common substring length

        Longest common substring length is 2, either "ab" or "de".
      3. Final Answer:

        2 -> Option A
      4. Quick Check:

        Longest common substring length = 2 [OK]
      Hint: Check continuous matching chars, not total matches [OK]
      Common Mistakes:
      • Counting non-continuous matches
      • Confusing substring length with subsequence length
      • Off-by-one errors in indexing
      4. Identify the bug in this Longest Common Substring C# code snippet:
      string s1 = "hello";
      string s2 = "yellow";
      int m = s1.Length;
      int n = s2.Length;
      int[,] dp = new int[m, n];
      int maxLen = 0;
      for (int i = 1; i <= m; i++) {
      for (int j = 1; j <= n; j++) {
      if (s1[i - 1] == s2[j - 1]) {
      dp[i, j] = dp[i - 1, j - 1] + 1;
      if (dp[i, j] > maxLen) maxLen = dp[i, j];
      } else {
      dp[i, j] = 0;
      }
      }
      }
      Console.WriteLine(maxLen);
      medium
      A. The comparison should be s1[i] == s2[j] without -1
      B. The dp array size should be (m+1, n+1) to avoid index errors
      C. The loops should start from 0 instead of 1
      D. maxLen should be initialized to -1

      Solution

      1. Step 1: Check dp array size and indexing

        dp is declared as int[m, n], but loops access dp[i, j] with i and j up to m and n, causing index out of range.
      2. Step 2: Correct dp size for safe indexing

        dp should be int[m+1, n+1] to allow indices from 0 to m and 0 to n safely.
      3. Final Answer:

        The dp array size should be (m+1, n+1) to avoid index errors -> Option B
      4. Quick Check:

        dp size = (m+1, n+1) for safe indexing [OK]
      Hint: Add +1 to dp array size for boundary indexing [OK]
      Common Mistakes:
      • Using dp size without +1 causes runtime errors
      • Starting loops at 0 causes negative indexing
      • Incorrect character indexing without -1
      5. Given two strings s1 = "xabxac" and s2 = "abcabxabcd", what is the length of their longest common substring?
      hard
      A. 3
      B. 6
      C. 5
      D. 4

      Solution

      1. Step 1: Identify common substrings between s1 and s2

        Check substrings like "abx", "bxa", "xab", "abxa". The longest common substring is "abxa" with length 4.
      2. Step 2: Confirm no longer substring exists

        "abxac" is in s1 but not fully in s2 consecutively. So length 4 is maximum.
      3. Final Answer:

        4 -> Option D
      4. Quick Check:

        Longest common substring length = 4 [OK]
      Hint: Look for longest continuous matching sequence [OK]
      Common Mistakes:
      • Counting subsequence instead of substring
      • Overestimating length by including non-continuous chars
      • Ignoring overlapping substrings
      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