Bird
Raised Fist0
DSA Cprogramming~10 mins

Palindrome Partitioning Using Backtracking 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 check if a substring is a palindrome.

DSA C
int isPalindrome(char *s, int start, int end) {
    while (start < end) {
        if (s[start] != s[end]) {
            return [1];
        }
        start++;
        end--;
    }
    return 1;
}
Drag options to blanks, or click blank then click option'
A0
B1
C-1
D2
Attempts:
3 left
💡 Hint
Common Mistakes
Returning 1 instead of 0 when characters don't match.
Not returning any value inside the if condition.
2fill in blank
medium

Complete the code to add a substring to the current partition list.

DSA C
void addSubstring(char *s, int start, int end, char result[][100], int *resIndex) {
    int i, j = 0;
    for (i = start; i <= end; i++) {
        result[*resIndex][j++] = s[i];
    }
    result[*resIndex][j] = '\0';
    (*resIndex)[1];
}
Drag options to blanks, or click blank then click option'
A++
B--
C+=
D=
Attempts:
3 left
💡 Hint
Common Mistakes
Using -- which decreases the index.
Using = which overwrites the index.
3fill in blank
hard

Fix the error in the recursive backtracking call to explore partitions.

DSA C
void backtrack(char *s, int start, char result[][100], int resIndex) {
    if (s[start] == '\0') {
        // print or store the partition
        return;
    }
    for (int end = start; s[end] != '\0'; end++) {
        if (isPalindrome(s, start, end)) {
            addSubstring(s, start, end, result, &resIndex);
            backtrack(s, [1], result, resIndex);
        }
    }
}
Drag options to blanks, or click blank then click option'
Aend
Bstart + 1
Cend + 1
Dstart
Attempts:
3 left
💡 Hint
Common Mistakes
Using start + 1 which may skip substrings.
Using end which causes infinite recursion.
4fill in blank
hard

Fill both blanks to correctly backtrack after recursive call.

DSA C
void backtrack(char *s, int start, char result[][100], int *resIndex) {
    if (s[start] == '\0') {
        // print or store the partition
        return;
    }
    for (int end = start; s[end] != '\0'; end++) {
        if (isPalindrome(s, start, end)) {
            addSubstring(s, start, end, result, resIndex);
            backtrack(s, end + 1, result, resIndex);
            [1];
            [2];
        }
    }
}
Drag options to blanks, or click blank then click option'
A*resIndex--
B(*resIndex)--
CresIndex--
D(*resIndex)++
Attempts:
3 left
💡 Hint
Common Mistakes
Using resIndex-- which changes pointer address.
Not decrementing resIndex causing wrong partitions.
5fill in blank
hard

Fill all three blanks to initialize and start palindrome partitioning.

DSA C
int main() {
    char s[] = "aab";
    char result[100][100];
    int [1] = 0;
    backtrack(s, [2], result, &[3]);
    return 0;
}
Drag options to blanks, or click blank then click option'
AresIndex
B0
D1
Attempts:
3 left
💡 Hint
Common Mistakes
Passing resIndex instead of &resIndex.
Starting backtrack from 1 instead of 0.

Practice

(1/5)
1. What is the main goal of palindrome partitioning using backtracking on a string s?
easy
A. To find the longest palindrome substring in s
B. To split s into all possible substrings where each substring is a palindrome
C. To count the number of palindromes in s
D. To reverse the string s using recursion

Solution

  1. Step 1: Understand palindrome partitioning

    Palindrome partitioning means dividing the string into parts where each part reads the same forwards and backwards.
  2. Step 2: Role of backtracking

    Backtracking helps explore all possible ways to split the string into palindrome substrings.
  3. Final Answer:

    To split s into all possible substrings where each substring is a palindrome -> Option B
  4. Quick Check:

    Palindrome partitioning = all palindrome substrings [OK]
Hint: Backtracking explores all palindrome splits [OK]
Common Mistakes:
  • Confusing palindrome partitioning with longest palindrome substring
  • Thinking it only counts palindromes instead of listing partitions
  • Assuming it reverses the string
2. Which of the following is the correct base case condition in a backtracking function for palindrome partitioning of string s starting at index start?
easy
A. if (start == s.length()) add current partition to result and return;
B. if (start > s.length()) return false;
C. if (start == s.length()) return true;
D. if (start < 0) return;

Solution

  1. Step 1: Identify when to stop recursion

    When start reaches the length of the string, it means the entire string is partitioned.
  2. Step 2: What to do at base case

    At this point, add the current list of palindrome substrings to the result list and return to explore other partitions.
  3. Final Answer:

    if (start == s.length()) add current partition to result and return; -> Option A
  4. Quick Check:

    Base case adds partition when start reaches string end [OK]
Hint: Add partition when start equals string length [OK]
Common Mistakes:
  • Returning true/false instead of adding partition
  • Checking start > length instead of == length
  • Using invalid index checks like start < 0
3. What will be the output partitions for the string "aab" using palindrome partitioning with backtracking?
medium
A. [["aab"]]
B. [["aa", "ab"]]
C. [["a", "ab"]]
D. [["a", "a", "b"], ["aa", "b"]]

Solution

  1. Step 1: Check all palindrome substrings

    "a" is palindrome, "aa" is palindrome, "b" is palindrome, but "ab" and "aab" are not.
  2. Step 2: List all palindrome partitions

    Partitions are ["a", "a", "b"] and ["aa", "b"].
  3. Final Answer:

    [["a", "a", "b"], ["aa", "b"]] -> Option D
  4. Quick Check:

    Valid palindrome partitions = [["a", "a", "b"], ["aa", "b"]] [OK]
Hint: Check substrings palindrome before partitioning [OK]
Common Mistakes:
  • Including non-palindrome substrings like "ab"
  • Missing the partition ["aa", "b"]
  • Returning the whole string as one partition
4. Given the following code snippet for palindrome partitioning, what is the error?
void backtrack(char* s, int start, char** current, int currentSize, char*** result, int* returnSize) {
  if (start == strlen(s)) {
    result[*returnSize] = current;
    (*returnSize)++;
    return;
  }
  for (int end = start; end < strlen(s); end++) {
    if (isPalindrome(s, start, end)) {
      current[currentSize] = substring(s, start, end);
      backtrack(s, end + 1, current, currentSize + 1, result, returnSize);
    }
  }
}
medium
A. Assigning current directly to result causes shared reference issues
B. The base case condition is incorrect
C. The loop should run from end = 0 to end < strlen(s)
D. Missing return statement after recursive call

Solution

  1. Step 1: Analyze base case assignment

    Assigning current pointer directly to result[*returnSize] stores the same reference for all partitions.
  2. Step 2: Understand backtracking data handling

    We must copy the current partition array to avoid overwriting when backtracking continues.
  3. Final Answer:

    Assigning current directly to result causes shared reference issues -> Option A
  4. Quick Check:

    Copy partitions to result to avoid shared references [OK]
Hint: Copy current partition before adding to result [OK]
Common Mistakes:
  • Not copying current partition array
  • Incorrect loop range for end index
  • Ignoring base case correctness
5. How can you optimize palindrome checking in backtracking palindrome partitioning for string s of length n?
hard
A. Skip palindrome checking and add all substrings to partitions
B. Check palindrome by reversing substring every time during recursion
C. Precompute a 2D boolean table dp where dp[i][j] is true if substring s[i..j] is palindrome
D. Use a hash map to store all substrings and their palindrome status

Solution

  1. Step 1: Understand palindrome checking cost

    Checking palindrome by reversing substring each time costs O(n) per check, leading to O(n^3) overall.
  2. Step 2: Use dynamic programming optimization

    Precompute a 2D table dp where dp[i][j] stores palindrome status for substring s[i..j]. This reduces palindrome checks to O(1).
  3. Step 3: Benefit in backtracking

    Using dp speeds up backtracking by avoiding repeated palindrome checks.
  4. Final Answer:

    Precompute a 2D boolean table dp where dp[i][j] is true if substring s[i..j] is palindrome -> Option C
  5. Quick Check:

    DP table for palindrome checking optimizes backtracking [OK]
Hint: Use DP table to check palindrome in O(1) time [OK]
Common Mistakes:
  • Reversing substring every time causing slow performance
  • Using hash map adds unnecessary overhead
  • Skipping palindrome checks leads to wrong partitions
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