Bird
Raised Fist0
DSA C#programming~10 mins

Longest Common Subsequence in DSA C# - Interactive Practice

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

Complete the code to initialize the 2D array for dynamic programming.

DSA C#
int[,] dp = new int[[1], [2]];
Drag options to blanks, or click blank then click option'
As1.Length + 1
Bs2.Length + 1
Cs1.Length
Ds2.Length
Es1.Length - 1
Fs2.Length - 1
Gs1.Length + 2
Hs2.Length + 2
Attempts:
3 left
💡 Hint
Common Mistakes
Using lengths without adding 1 causes index errors.
Using lengths minus 1 causes negative or too small array size.
2fill in blank
medium

Complete the code to check if characters at current indices match.

DSA C#
if (s1[i - 1] [1] s2[j - 1])
Drag options to blanks, or click blank then click option'
A==
B<
C!=
D>
Attempts:
3 left
💡 Hint
Common Mistakes
Using '!=' instead of '==' reverses the logic.
Using '>' or '<' is incorrect for character equality.
3fill in blank
hard

Fix the error in updating dp when characters match.

DSA C#
dp[i, j] = dp[i - 1, j - 1] [1] 1;
Drag options to blanks, or click blank then click option'
A+
B-
C*
D/
Attempts:
3 left
💡 Hint
Common Mistakes
Using '-' decreases the subsequence length incorrectly.
Using '*' or '/' causes wrong calculations.
4fill in blank
hard

Fill both blanks to update dp when characters do not match.

DSA C#
dp[i, j] = Math.[1](dp[i - 1, j], dp[i, [2] - 1]);
Drag options to blanks, or click blank then click option'
AMax
BMin
Cj
Di
Attempts:
3 left
💡 Hint
Common Mistakes
Using Math.Min gives the wrong subsequence length.
Swapping i and j indices causes wrong dp access.
5fill in blank
hard

Fill all three blanks to complete the LCS length calculation loop.

DSA C#
for (int i = 1; i [1] s1.Length + 1; i++) {
    for (int j = 1; j [2] s2.Length + 1; j++) {
        if (s1[i - 1] == s2[j - 1]) {
            dp[i, j] = dp[i - 1, j - 1] [3] 1;
        } else {
            dp[i, j] = Math.Max(dp[i - 1, j], dp[i, j - 1]);
        }
    }
}
Drag options to blanks, or click blank then click option'
A<
B<=
C+
D-
Attempts:
3 left
💡 Hint
Common Mistakes
Using '<=' causes index out of range errors.
Using '-' instead of '+' reduces subsequence length.

Practice

(1/5)
1. What does the Longest Common Subsequence (LCS) between two strings represent?
easy
A. The longest sequence of characters appearing in both strings in the same order, not necessarily contiguous
B. The longest sequence of consecutive characters shared by both strings
C. The string formed by concatenating both inputs
D. The shortest string that contains both inputs as subsequences

Solution

  1. Step 1: Define subsequence

    A subsequence maintains relative order of characters but does not require them to be contiguous. 'ace' is a subsequence of 'abcde'.
  2. Step 2: LCS definition

    LCS is the longest such subsequence common to both strings. For 'ABCBDAB' and 'BDCAB', LCS is 'BCAB' or 'BDAB', length 4.
  3. Final Answer:

    Longest common subsequence - same order, not necessarily contiguous. -> Option A
  4. Quick Check:

    Subsequence = order preserved, not contiguous. LCS = longest shared one. [OK]
Hint: Subsequence = order preserved, gaps allowed. LCS = longest one common to both strings. [OK]
Common Mistakes:
  • Confusing subsequence with substring (substring must be contiguous)
  • Thinking LCS is the shortest common supersequence
  • Assuming characters must be adjacent
2. For strings X = "ABCD" and Y = "ACDF", what is the length of the LCS?
medium
A. 2
B. 3
C. 4
D. 1

Solution

  1. Step 1: Find common subsequences

    Characters in both: A, C, D. Check order: A appears before C in both. C appears before D in both. So 'ACD' is a common subsequence of length 3.
  2. Step 2: Can we do better?

    'ABCD' and 'ACDF' share A, C, D in order. B is not in Y. F is not in X. No common subsequence of length 4 exists.
  3. Final Answer:

    LCS = "ACD", length 3. -> Option B
  4. Quick Check:

    A→C→D in both strings: length 3. [OK]
Hint: Trace common characters in order: A(pos 0,0)→C(pos 2,1)→D(pos 3,2) = 3. [OK]
Common Mistakes:
  • Counting all common characters without checking order
  • Including B which is not in Y
  • Stopping at 2 by missing D
3. In the LCS DP recurrence, when X[i] == Y[j], what is dp[i][j]?
medium
A. dp[i-1][j-1]
B. dp[i-1][j-1] + 1
C. max(dp[i-1][j], dp[i][j-1])
D. dp[i][j-1] + 1

Solution

  1. Step 1: When characters match

    If X[i] == Y[j], the current characters extend the LCS found without them. We add 1 to the LCS of X[0..i-1] and Y[0..j-1].
  2. Step 2: Recurrence

    dp[i][j] = dp[i-1][j-1] + 1. We extend the diagonal neighbor by 1.
  3. Step 3: When they don't match

    dp[i][j] = max(dp[i-1][j], dp[i][j-1]) - take the best from skipping either character.
  4. Final Answer:

    dp[i-1][j-1] + 1 -> Option B
  5. Quick Check:

    Match → diagonal + 1. No match → max of left and above. [OK]
Hint: Match: diagonal + 1. No match: max(left, above). [OK]
Common Mistakes:
  • Using dp[i-1][j-1] without adding 1
  • Using max formula when characters match
  • Adding 1 to dp[i][j-1] instead of diagonal
4. What is the time and space complexity of the standard 2D DP LCS solution for strings of length m and n?
medium
A. Time O(m+n), Space O(m+n)
B. Time O(m×n), Space O(m×n)
C. Time O(m×n), Space O(min(m,n))
D. Time O(2^n), Space O(n)

Solution

  1. Step 1: Time complexity

    We fill a 2D table of size (m+1)×(n+1), computing each cell in O(1). Total: O(m×n).
  2. Step 2: Space complexity

    The full 2D DP table requires O(m×n) space. Space can be optimized to O(min(m,n)) using two rows, but standard solution uses O(m×n).
  3. Final Answer:

    Time O(m×n), Space O(m×n) -> Option B
  4. Quick Check:

    Standard 2D table = O(m×n) both time and space. [OK]
Hint: Standard LCS: O(m×n) time and space (2D table). [OK]
Common Mistakes:
  • Saying O(m+n) which is linear - LCS needs quadratic
  • Reporting space-optimized O(min(m,n)) for the standard solution
  • Confusing with exponential recursion without memoization
5. In C#, after filling the LCS DP table for X="AGGTAB" and Y="GXTXAYB", what value does dp[6][7] hold?
hard
A. 3
B. 4
C. 5
D. 6

Solution

  1. Step 1: Identify LCS

    X = 'AGGTAB', Y = 'GXTXAYB'. Common subsequences include 'GTAB' (length 4): G(1,0)→T(2,3)→A(4,4)→B(5,6).
  2. Step 2: Verify length 4

    G: appears in both at valid positions. T: X[2]='G',X[2]='G'... Let's check: X='A,G,G,T,A,B'. Y='G,X,T,X,A,Y,B'. Common: G(X[1],Y[0]), T(X[3],Y[2]), A(X[4],Y[4]), B(X[5],Y[6]) → GTAB length 4.
  3. Final Answer:

    dp[6][7] = 4 -> Option B
  4. Quick Check:

    LCS of 'AGGTAB' and 'GXTXAYB' is 'GTAB' = length 4. [OK]
Hint: LCS('AGGTAB','GXTXAYB') = 'GTAB' = 4. This is a classic example - memorize it. [OK]
Common Mistakes:
  • Confusing LCS length with string length
  • Incorrectly tracing the DP table
  • Getting 3 by missing one character in the subsequence
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