Bird
Raised Fist0
DSA C++programming~20 mins

Longest Palindromic Substring in DSA C++ - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Palindrome Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of longest palindromic substring length
What is the output of the following C++ code that finds the length of the longest palindromic substring?
DSA C++
int longestPalindromeLength(const std::string& s) {
    int n = s.size();
    if (n == 0) return 0;
    int maxLen = 1;
    for (int i = 0; i < n; ++i) {
        int left = i, right = i;
        while (left >= 0 && right < n && s[left] == s[right]) {
            maxLen = std::max(maxLen, right - left + 1);
            --left;
            ++right;
        }
        left = i; right = i + 1;
        while (left >= 0 && right < n && s[left] == s[right]) {
            maxLen = std::max(maxLen, right - left + 1);
            --left;
            ++right;
        }
    }
    return maxLen;
}

#include <iostream>
int main() {
    std::string s = "babad";
    std::cout << longestPalindromeLength(s) << std::endl;
    return 0;
}
A4
B5
C2
D3
Attempts:
2 left
💡 Hint
Check palindromes centered at each character and between characters.
❓ Predict Output
intermediate
2:00remaining
Output of longest palindromic substring
What is the output of this C++ code that returns the longest palindromic substring itself?
DSA C++
std::string longestPalindrome(const std::string& s) {
    int n = s.size();
    if (n == 0) return "";
    int start = 0, maxLen = 1;
    for (int i = 0; i < n; ++i) {
        int left = i, right = i;
        while (left >= 0 && right < n && s[left] == s[right]) {
            if (right - left + 1 > maxLen) {
                start = left;
                maxLen = right - left + 1;
            }
            --left;
            ++right;
        }
        left = i; right = i + 1;
        while (left >= 0 && right < n && s[left] == s[right]) {
            if (right - left + 1 > maxLen) {
                start = left;
                maxLen = right - left + 1;
            }
            --left;
            ++right;
        }
    }
    return s.substr(start, maxLen);
}

#include <iostream>
int main() {
    std::string s = "cbbd";
    std::cout << longestPalindrome(s) << std::endl;
    return 0;
}
Ab
Bcbbd
Cbb
Dbd
Attempts:
2 left
💡 Hint
Look for the longest substring that reads the same forward and backward.
🔧 Debug
advanced
2:00remaining
Identify the runtime error in palindrome code
What runtime error will this C++ code produce when run with input "abc"?
DSA C++
int longestPalindromeLength(const std::string& s) {
    int n = s.size();
    int maxLen = 1;
    for (int i = 0; i <= n; ++i) {
        int left = i, right = i;
        while (left >= 0 && right < n && s[left] == s[right]) {
            maxLen = std::max(maxLen, right - left + 1);
            --left;
            ++right;
        }
    }
    return maxLen;
}

#include <iostream>
int main() {
    std::string s = "abc";
    std::cout << longestPalindromeLength(s) << std::endl;
    return 0;
}
ANo error, output is 1
BOut of range error (accessing s[n])
CSegmentation fault due to null pointer
DInfinite loop
Attempts:
2 left
💡 Hint
Check the loop boundary conditions carefully.
🧠 Conceptual
advanced
1:30remaining
Time complexity of longest palindromic substring algorithm
What is the time complexity of the expand-around-center approach to find the longest palindromic substring in a string of length n?
AO(n^2)
BO(n log n)
CO(n^3)
DO(n)
Attempts:
2 left
💡 Hint
Consider how many centers and expansions happen.
🚀 Application
expert
3:00remaining
Longest palindromic substring after one character removal
Given a string, which approach best finds the longest palindromic substring after removing at most one character?
AUse dynamic programming to check all substrings and skip one character if needed
BUse Manacher's algorithm directly without modification
CCheck all substrings of length n-1 only
DUse a greedy approach removing the first mismatched character and check palindrome
Attempts:
2 left
💡 Hint
Consider how to handle the removal of one character in palindrome checks.

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