Bird
Raised Fist0
DSA C++programming~10 mins

Longest Palindromic Substring 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 maximum length of palindrome found so far.

DSA C++
int maxLength = [1];
Drag options to blanks, or click blank then click option'
A-1
B1
C0
Dstring::npos
Attempts:
3 left
💡 Hint
Common Mistakes
Initializing maxLength to 1 before checking any substring.
2fill in blank
medium

Complete the code to expand around the center and return the length of palindrome.

DSA C++
while (left >= 0 && right < s.size() && s[left] == s[right]) {
    left--;
    right++;
}
return right - left - [1];
Drag options to blanks, or click blank then click option'
A2
B1
C0
D-1
Attempts:
3 left
💡 Hint
Common Mistakes
Returning right - left without subtracting 1.
Returning right - left - 2.
3fill in blank
hard

Fix the error in the code to update the start index when a longer palindrome is found.

DSA C++
if (len > maxLength) {
    maxLength = len;
    start = i - [1] / 2;
}
Drag options to blanks, or click blank then click option'
Alen - 1
Blen / 2
Clen + 1
Dlen
Attempts:
3 left
💡 Hint
Common Mistakes
Using len directly without subtracting 1.
4fill in blank
hard

Fill both blanks to correctly call the expand function for odd and even length palindromes.

DSA C++
int len1 = expandAroundCenter(s, i, i);
int len2 = expandAroundCenter(s, i, [1]);
int len = std::max(len1, [2]);
Drag options to blanks, or click blank then click option'
Ai + 1
Bi - 1
Clen1
Dlen2
Attempts:
3 left
💡 Hint
Common Mistakes
Using i - 1 instead of i + 1 for even length.
5fill in blank
hard

Fill all three blanks to complete the function that finds the longest palindromic substring.

DSA C++
std::string longestPalindrome(std::string s) {
    int start = 0, maxLength = 1;
    for (int i = 0; i < s.size(); i++) {
        int len1 = expandAroundCenter(s, i, i);
        int len2 = expandAroundCenter(s, i, i + 1);
        int len = std::max(len1, len2);
        if (len > maxLength) {
            maxLength = len;
            start = i - [1] / 2;
        }
    }
    return s.substr(start, [2]);
}

int expandAroundCenter(const std::string& s, int left, int right) {
    while (left >= 0 && right < s.size() && s[left] == s[right]) {
        left--;
        right++;
    }
    return right - left - [3];
}
Drag options to blanks, or click blank then click option'
Alen - 1
BmaxLength
C2
D1
Attempts:
3 left
💡 Hint
Common Mistakes
Using incorrect divisor or substring length.

Practice

(1/5)
1. What is the main goal of the Longest Palindromic Substring problem?
easy
A. Find the longest substring that reads the same forwards and backwards
B. Find the longest substring with all unique characters
C. Find the longest substring with increasing characters
D. Find the longest substring that contains only vowels

Solution

  1. Step 1: Understand the problem statement

    The problem asks to find the longest part of a string that is a palindrome, meaning it reads the same forwards and backwards.
  2. Step 2: Compare options with the problem goal

    Only Find the longest substring that reads the same forwards and backwards describes finding a substring that reads the same forwards and backwards, which matches the palindrome definition.
  3. Final Answer:

    Find the longest substring that reads the same forwards and backwards -> Option A
  4. Quick Check:

    Longest Palindromic Substring = Find the longest substring that reads the same forwards and backwards [OK]
Hint: Look for substring that reads same forwards and backwards [OK]
Common Mistakes:
  • Confusing palindrome with unique characters
  • Thinking about substrings with vowels only
  • Mixing substring with subsequence
2. Which of the following C++ code snippets correctly initializes a 2D vector dp of size n x n with false values for the Longest Palindromic Substring problem?
easy
A. std::vector dp(n, std::vector<int>(n, false));
B. std::vector<bool> dp(n, std::vector<bool>(n, false));
C. std::vector dp(n, n, false);
D. std::vector dp(n, std::vector<bool>(n, false));

Solution

  1. Step 1: Understand 2D vector initialization syntax

    To create a 2D vector of booleans with size n x n, use vector of vectors: std::vector dp(n, std::vector<bool>(n, false));
  2. Step 2: Check each option's correctness

    std::vector dp(n, std::vector<bool>(n, false)); uses correct syntax. std::vector<bool> dp(n, std::vector<bool>(n, false)); tries to assign vector<bool> to vector<bool>, which is invalid. std::vector dp(n, std::vector<int>(n, false)); uses int instead of bool. std::vector dp(n, n, false); uses invalid constructor syntax.
  3. Final Answer:

    std::vector dp(n, std::vector<bool>(n, false)); -> Option D
  4. Quick Check:

    Correct 2D vector initialization = std::vector dp(n, std::vector<bool>(n, false)); [OK]
Hint: Use vector of vectors with inner vector initialized [OK]
Common Mistakes:
  • Using wrong data type for dp vector
  • Incorrect constructor syntax for 2D vector
  • Confusing vector<bool> with vector
3. What is the output of the following C++ code snippet that finds the longest palindromic substring length?
std::string s = "babad";
int n = s.size();
int maxLength = 1;
for (int i = 0; i < n; i++) {
  for (int j = i; j < n; j++) {
    int left = i, right = j;
    bool isPalindrome = true;
    while (left < right) {
      if (s[left] != s[right]) {
        isPalindrome = false;
        break;
      }
      left++; right--;
    }
    if (isPalindrome && (j - i + 1) > maxLength) {
      maxLength = j - i + 1;
    }
  }
}
std::cout << maxLength << std::endl;
medium
A. 3
B. 2
C. 4
D. 5

Solution

  1. Step 1: Understand the code logic

    The code checks all substrings of "babad" and updates maxLength if the substring is a palindrome and longer than current maxLength.
  2. Step 2: Identify longest palindromic substrings in "babad"

    "bab" and "aba" are palindromes of length 3. No longer palindrome exists.
  3. Final Answer:

    3 -> Option A
  4. Quick Check:

    Longest palindrome length in "babad" = 3 [OK]
Hint: Check all substrings and update max length if palindrome [OK]
Common Mistakes:
  • Assuming entire string is palindrome
  • Counting non-palindromic substrings
  • Off-by-one errors in substring length
4. Identify the bug in the following C++ code snippet intended to find the longest palindromic substring length:
std::string s = "cbbd";
int n = s.size();
int maxLength = 1;
for (int i = 0; i < n; i++) {
  for (int j = i; j < n; j++) {
    int left = i, right = j;
    while (left < right) {
      if (s[left] != s[right]) {
        break;
      }
      left++; right--;
    }
    if ((j - i + 1) > maxLength) {
      maxLength = j - i + 1;
    }
  }
}
std::cout << maxLength << std::endl;
medium
A. Incorrect loop ranges for i and j
B. Wrong initialization of maxLength
C. Missing check if substring is palindrome before updating maxLength
D. Using break instead of continue in while loop

Solution

  1. Step 1: Analyze palindrome check logic

    The code breaks out of while loop if characters don't match but does not track if substring is palindrome.
  2. Step 2: Check maxLength update condition

    maxLength is updated without confirming substring is palindrome, causing incorrect results.
  3. Final Answer:

    Missing check if substring is palindrome before updating maxLength -> Option C
  4. Quick Check:

    Must confirm palindrome before updating maxLength [OK]
Hint: Always confirm palindrome before updating max length [OK]
Common Mistakes:
  • Updating maxLength without palindrome check
  • Confusing break and continue in loops
  • Incorrect loop boundaries
5. Given the string "forgeeksskeegfor", which approach below efficiently finds the longest palindromic substring and what is its length?
hard
A. Dynamic Programming approach, length 7
B. Expand Around Center approach, length 10
C. Brute Force approach, length 12
D. Manacher's Algorithm, length 8

Solution

  1. Step 1: Identify longest palindrome in "forgeeksskeegfor"

    The longest palindromic substring is "geeksskeeg" with length 10.
  2. Step 2: Choose efficient approach

    Expand Around Center approach efficiently finds palindromes by expanding from each center, suitable for this problem.
  3. Final Answer:

    Expand Around Center approach, length 10 -> Option B
  4. Quick Check:

    Longest palindrome length = 10 using Expand Around Center [OK]
Hint: Expand from centers to find longest palindrome efficiently [OK]
Common Mistakes:
  • Confusing length of palindrome substring
  • Choosing less efficient brute force for large strings
  • Mixing up algorithm names and their complexities
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