Bird
Raised Fist0
DSA C++programming~20 mins

Palindrome Partitioning DP Minimum Cuts in DSA C++ - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Palindrome Partitioning Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of minimum cuts for palindrome partitioning
What is the output of the following C++ code that calculates the minimum cuts needed to partition the string into palindromes?
DSA C++
int minCut(string s) {
    int n = s.size();
    vector<vector<bool>> dp(n, vector<bool>(n, false));
    vector<int> cuts(n, 0);
    for (int i = 0; i < n; i++) {
        int minCut = i;
        for (int j = 0; j <= i; j++) {
            if (s[j] == s[i] && (i - j < 2 || dp[j + 1][i - 1])) {
                dp[j][i] = true;
                minCut = j == 0 ? 0 : min(minCut, cuts[j - 1] + 1);
            }
        }
        cuts[i] = minCut;
    }
    return cuts[n - 1];
}

int main() {
    string s = "aab";
    cout << minCut(s) << endl;
    return 0;
}
A1
B0
C2
D3
Attempts:
2 left
💡 Hint
Think about how many cuts are needed to split "aab" into palindromes.
🧠 Conceptual
intermediate
1:30remaining
Understanding the DP table in palindrome partitioning
In the palindrome partitioning DP solution, what does the 2D boolean table dp[i][j] represent?
AThe number of palindrome partitions between i and j
BThe minimum cuts needed for substring from i to j
CThe length of the longest palindrome substring between i and j
DWhether the substring from index i to j is a palindrome
Attempts:
2 left
💡 Hint
Think about what information helps decide if a substring is palindrome.
🔧 Debug
advanced
2:00remaining
Identify the error in the DP palindrome partitioning code
What error will the following code produce when run?
DSA C++
int minCut(string s) {
    int n = s.size();
    vector<vector<bool>> dp(n, vector<bool>(n, false));
    vector<int> cuts(n, 0);
    for (int i = 0; i < n; i++) {
        int minCut = i;
        for (int j = 0; j <= i; j++) {
            if (s[j] == s[i] && (i - j < 2 || dp[j + 1][i - 1])) {
                dp[j][i] = true;
                minCut = j == 0 ? 0 : min(minCut, cuts[j]);
            }
        }
        cuts[i] = minCut;
    }
    return cuts[n - 1];
}

int main() {
    string s = "aab";
    cout << minCut(s) << endl;
    return 0;
}
AOut of range error accessing cuts[j]
BNo error, outputs 1
CRuntime error due to invalid dp access
DCompilation error due to missing header
Attempts:
2 left
💡 Hint
Check the index used to access cuts vector inside the inner loop.
🚀 Application
advanced
2:30remaining
Minimum cuts for palindrome partitioning of a complex string
What is the minimum number of cuts needed to partition the string "ababbbabbababa" into palindromes?
A3
B5
C4
D6
Attempts:
2 left
💡 Hint
Try to find palindrome substrings and count cuts between them.
🧠 Conceptual
expert
1:30remaining
Time complexity of palindrome partitioning minimum cuts DP
What is the time complexity of the dynamic programming solution for palindrome partitioning minimum cuts on a string of length n?
AO(n^2)
BO(n^3)
CO(n log n)
DO(n)
Attempts:
2 left
💡 Hint
Consider the nested loops and palindrome checks.

Practice

(1/5)
1. What does the "Palindrome Partitioning DP Minimum Cuts" problem aim to find for a given string s?
easy
A. The longest palindrome that can be formed by rearranging s.
B. The maximum length of a palindrome substring in s.
C. The minimum number of cuts needed to partition s into palindromic substrings.
D. The total number of palindrome substrings in s.

Solution

  1. Step 1: Understand the problem goal

    The problem asks for the fewest cuts needed to split the string into parts where each part is a palindrome.
  2. Step 2: Clarify what minimum cuts mean

    Minimum cuts means the smallest number of splits between characters so that all resulting substrings are palindromes.
  3. Final Answer:

    The minimum number of cuts needed to partition s into palindromic substrings. -> Option C
  4. Quick Check:

    Minimum cuts = minimum splits for palindrome parts [OK]
Hint: Focus on splitting string into palindrome parts with fewest cuts [OK]
Common Mistakes:
  • Confusing minimum cuts with maximum palindrome length
  • Counting total palindrome substrings instead of cuts
  • Thinking about rearranging characters
2. Which of the following C++ code snippets correctly initializes a 2D vector isPalindrome of size n x n with false values for palindrome checks?
easy
A. std::vector<bool> isPalindrome(n, std::vector<bool>(n, false));
B. std::vector isPalindrome(n)(n, false);
C. std::vector isPalindrome(n, n, false);
D. std::vector isPalindrome(n, std::vector<bool>(n, false));

Solution

  1. Step 1: Recall correct 2D vector initialization syntax

    In C++, a 2D vector is initialized as vector of vectors: vector v(rows, vector<bool>(cols, value)).
  2. Step 2: Check each option

    std::vector isPalindrome(n, std::vector<bool>(n, false)); matches correct syntax. Options A, C, D have syntax errors or wrong types.
  3. Final Answer:

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

    Correct 2D vector init = std::vector isPalindrome(n, std::vector<bool>(n, false)); [OK]
Hint: Use vector of vectors with inner vector size and default value [OK]
Common Mistakes:
  • Using wrong vector types or missing inner vector
  • Trying to initialize 2D vector with wrong constructor
  • Confusing parentheses and commas in initialization
3. What is the output of the following C++ code snippet that calculates minimum cuts for s = "aab"?
std::string s = "aab";
int n = s.size();
std::vector isPalindrome(n, std::vector<bool>(n, false));
for (int i = 0; i < n; i++) {
  isPalindrome[i][i] = true;
}
for (int length = 2; length <= n; length++) {
  for (int start = 0; start <= n - length; start++) {
    int end = start + length - 1;
    if (s[start] == s[end]) {
      if (length == 2) isPalindrome[start][end] = true;
      else isPalindrome[start][end] = isPalindrome[start + 1][end - 1];
    }
  }
}
std::vector<int> cuts(n, 0);
for (int i = 0; i < n; i++) {
  int minCut = i;
  for (int j = 0; j <= i; j++) {
    if (isPalindrome[j][i]) {
      minCut = j == 0 ? 0 : std::min(minCut, cuts[j - 1] + 1);
    }
  }
  cuts[i] = minCut;
}
std::cout << cuts[n - 1] << std::endl;
medium
A. 1
B. 0
C. 2
D. 3

Solution

  1. Step 1: Identify palindromic substrings in "aab"

    "a", "a", "b" are palindromes; "aa" is palindrome; "aab" is not.
  2. Step 2: Calculate minimum cuts using DP

    Minimum cuts: "aa" | "b" needs 1 cut. So cuts[n-1] = 1.
  3. Final Answer:

    1 -> Option A
  4. Quick Check:

    Minimum cuts for "aab" = 1 [OK]
Hint: Check palindrome substrings and count cuts between them [OK]
Common Mistakes:
  • Assuming no cuts needed for non-palindrome whole string
  • Misindexing palindrome checks
  • Forgetting to update minimum cuts properly
4. The following code snippet for minimum cuts in palindrome partitioning has a bug. What is the error?
for (int i = 0; i < n; i++) {
  int minCut = i;
  for (int j = 0; j <= i; j++) {
    if (isPalindrome[j][i]) {
      minCut = std::min(minCut, cuts[j] + 1);
    }
  }
  cuts[i] = minCut;
}
medium
A. Using cuts[j] instead of cuts[j - 1] causes incorrect indexing.
B. The outer loop should start from 1, not 0.
C. The inner loop should run from i to n, not 0 to i.
D. The isPalindrome check should be reversed to isPalindrome[i][j].

Solution

  1. Step 1: Analyze the indexing in cuts array

    When j == 0, cuts[j - 1] is invalid, so we must handle j == 0 separately.
  2. Step 2: Identify the bug in minCut update

    Using cuts[j] + 1 is wrong; it should be cuts[j - 1] + 1 except when j == 0.
  3. Final Answer:

    Using cuts[j] instead of cuts[j - 1] causes incorrect indexing. -> Option A
  4. Quick Check:

    Indexing cuts[j - 1] correctly fixes bug [OK]
Hint: Remember cuts[j - 1] for previous partition, handle j=0 separately [OK]
Common Mistakes:
  • Ignoring boundary condition j=0
  • Mixing up indices in cuts array
  • Incorrect loop ranges
5. Given the string s = "ababbbabbababa", what is the minimum number of cuts needed to partition it into palindromic substrings using the DP approach?
hard
A. 5
B. 3
C. 4
D. 6

Solution

  1. Step 1: Understand the string and palindrome partitions

    The string "ababbbabbababa" can be partitioned into palindromes with minimum cuts by checking all substrings using DP.
  2. Step 2: Use DP to find minimum cuts

    Known solution for this string is 3 cuts, for example: "a" | "babbbab" | "b" | "ababa".
  3. Final Answer:

    3 -> Option B
  4. Quick Check:

    Minimum cuts for given string = 3 [OK]
Hint: Use DP palindrome checks and track minimum cuts carefully [OK]
Common Mistakes:
  • Underestimating cuts by missing longer palindrome substrings
  • Overcounting cuts by splitting too often
  • Not using DP to optimize palindrome checks
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