Hint: Use nested vector constructor with size and initial value [OK]
Common Mistakes:
Using wrong vector constructor parameters
Missing initialization value for inner vectors
Confusing 1D and 2D vector declarations
3. What is the output of the following C++ code snippet that calculates the length of LCS for strings s1 = "ABCBDAB" and s2 = "BDCABA"?
std::string s1 = "ABCBDAB";
std::string s2 = "BDCABA";
int m = s1.size();
int n = s2.size();
std::vector dp(m+1, std::vector<int>(n+1, 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;
else
dp[i][j] = std::max(dp[i-1][j], dp[i][j-1]);
}
}
std::cout << dp[m][n] << std::endl;
medium
A. 5
B. 3
C. 4
D. 6
Solution
Step 1: Understand the DP table filling
The code fills dp table comparing characters of s1 and s2, increasing count when characters match.
Step 2: Trace LCS length for given strings
The LCS for "ABCBDAB" and "BDCABA" is "BDAB" or "BCBA" with length 4, but actually the longest common subsequence length is 4 or 5? Let's verify carefully.
Step 3: Verify LCS length
Common subsequences include "BCBA" (length 4), "BDAB" (length 4), but also "BCAB" (length 4). However, the classic known LCS length for these strings is 4. But let's check carefully:
Check sequences:
"BCBA" (B C B A) length 4
"BDAB" (B D A B) length 4
Is there a longer subsequence? "BCBAB" is not possible due to order.
Therefore, the length is 4.
Final Answer:
4 -> Option C
Quick Check:
LCS length = 4 [OK]
Hint: Trace DP table or recall classic LCS example [OK]
Common Mistakes:
Counting longest substring instead of subsequence
Off-by-one errors in indexing
Confusing length with number of matches
4. Identify the bug in the following LCS code snippet and select the correct fix:
std::string s1 = "AGGTAB";
std::string s2 = "GXTXAYB";
int m = s1.size();
int n = s2.size();
std::vector dp(m, std::vector<int>(n, 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;
else
dp[i][j] = std::max(dp[i-1][j], dp[i][j-1]);
}
}
std::cout << dp[m][n] << std::endl;
medium
A. Change dp size to (m+1) x (n+1) to avoid out-of-bound errors.
B. Start loops from i=0 and j=0 instead of 1.
C. Remove the else block to fix logic.
D. Use dp[i][j] = dp[i-1][j-1] + 2 when characters match.
Solution
Step 1: Check dp vector size and loop indices
dp is sized m x n but loops run from 1 to m and 1 to n, causing out-of-bound access at dp[m][n].
Step 2: Fix dp size to (m+1) x (n+1)
Allocating dp with size (m+1) x (n+1) matches loop indices and prevents out-of-bound errors.
Final Answer:
Change dp size to (m+1) x (n+1) to avoid out-of-bound errors. -> Option A
Quick Check:
dp size must match loop range [OK]
Hint: dp size = (m+1) x (n+1) for 1-based indexing [OK]
Common Mistakes:
Allocating dp with size m x n but using 1-based loops
Ignoring out-of-bound runtime errors
Incorrectly modifying dp values on match
5. Given two strings s1 = "XMJYAUZ" and s2 = "MZJAWXU", write a C++ function to find the actual Longest Common Subsequence string (not just its length). What is the correct LCS string returned by your function?
hard
A. "MJAU"
B. "MJZU"
C. "MJYU"
D. "MJAU" or "MJYU" depending on path
Solution
Step 1: Build dp table for LCS length
Use standard DP to fill dp table with lengths for substrings of s1 and s2.
Step 2: Trace back from dp[m][n] to find LCS string
Traceback yields "MJAU" of length 4.
Final Answer:
"MJAU" -> Option A
Quick Check:
LCS = "MJAU" [OK]
Hint: Trace back dp table to find the LCS string [OK]
Common Mistakes:
Assuming only one unique LCS string
Not tracing back dp table correctly
Confusing subsequence with substring
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.