Bird
Raised Fist0
DSA Typescriptprogramming~20 mins

Palindrome Partitioning Using Backtracking in DSA Typescript - 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 Palindrome Partitioning for 'aab'
What is the output of the following TypeScript code that finds all palindrome partitions of the string 'aab'?
DSA Typescript
function isPalindrome(s: string, left: number, right: number): boolean {
  while (left < right) {
    if (s[left] !== s[right]) return false;
    left++;
    right--;
  }
  return true;
}

function backtrack(s: string, start: number, path: string[], result: string[][]): void {
  if (start === s.length) {
    result.push([...path]);
    return;
  }
  for (let end = start; end < s.length; end++) {
    if (isPalindrome(s, start, end)) {
      path.push(s.substring(start, end + 1));
      backtrack(s, end + 1, path, result);
      path.pop();
    }
  }
}

function partition(s: string): string[][] {
  const result: string[][] = [];
  backtrack(s, 0, [], result);
  return result;
}

console.log(partition('aab'));
A[["a","a","b"],["aa","b"]]
B[["aab"]]
C[["a","ab"],["aa","b"]]
D[["a","a"],["b"]]
Attempts:
2 left
💡 Hint
Think about all ways to split the string where each part is a palindrome.
🧠 Conceptual
intermediate
1:30remaining
Number of Palindrome Partitions for 'racecar'
How many palindrome partitions does the string 'racecar' have using backtracking?
A4
B10
C6
D12
Attempts:
2 left
💡 Hint
Consider all ways to split 'racecar' into palindromic substrings.
🔧 Debug
advanced
2:00remaining
Identify the Bug in Palindrome Partitioning Code
What error does the following TypeScript code produce when run with input 'abc'?
DSA Typescript
function isPalindrome(s: string, left: number, right: number): boolean {
  while (left <= right) {
    if (s[left] !== s[right]) return false;
    left++;
    right--;
  }
  return true;
}

function backtrack(s: string, start: number, path: string[], result: string[][]): void {
  if (start === s.length) {
    result.push([...path]);
    return;
  }
  for (let end = start; end < s.length; end++) {
    if (isPalindrome(s, start, end)) {
      path.push(s.substring(start, end + 1));
      backtrack(s, end + 1, path, result);
      path.pop();
    }
  }
}

function partition(s: string): string[][] {
  const result: string[][] = [];
  backtrack(s, 0, [], result);
  return result;
}

console.log(partition('abc'));
ASyntaxError: Unexpected token
BNo error, outputs [['a','b','c']]
CTypeError: s.substring is not a function
DRangeError: Maximum call stack size exceeded
Attempts:
2 left
💡 Hint
Check the palindrome check condition carefully.
❓ Predict Output
advanced
2:00remaining
Output of Palindrome Partitioning for 'aaa'
What is the output of the following TypeScript code that partitions 'aaa' into palindromes?
DSA Typescript
function isPalindrome(s: string, left: number, right: number): boolean {
  while (left < right) {
    if (s[left] !== s[right]) return false;
    left++;
    right--;
  }
  return true;
}

function backtrack(s: string, start: number, path: string[], result: string[][]): void {
  if (start === s.length) {
    result.push([...path]);
    return;
  }
  for (let end = start; end < s.length; end++) {
    if (isPalindrome(s, start, end)) {
      path.push(s.substring(start, end + 1));
      backtrack(s, end + 1, path, result);
      path.pop();
    }
  }
}

function partition(s: string): string[][] {
  const result: string[][] = [];
  backtrack(s, 0, [], result);
  return result;
}

console.log(partition('aaa'));
A[["a","a","a"]]
B[["aaa"]]
C[["a","a","a"],["a","aa"],["aa","a"],["aaa"]]
D[["a","aa"]]
Attempts:
2 left
💡 Hint
Consider all palindrome substrings including overlapping ones.
🧠 Conceptual
expert
1:30remaining
Time Complexity of Palindrome Partitioning Using Backtracking
What is the time complexity of the palindrome partitioning algorithm using backtracking for a string of length n?
AO(2^n)
BO(n^3)
CO(n!)
DO(n * 2^n)
Attempts:
2 left
💡 Hint
Consider the number of partitions and palindrome checks.

Practice

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

Solution

  1. Step 1: Understand palindrome partitioning

    Palindrome partitioning means dividing a string into parts where each part is a palindrome.
  2. Step 2: Role of backtracking

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

    To split a string into all possible palindrome substrings -> Option D
  4. Quick Check:

    Palindrome partitioning = all palindrome splits [OK]
Hint: Backtracking explores all palindrome splits step-by-step [OK]
Common Mistakes:
  • Confusing palindrome partitioning with longest palindrome substring
  • Thinking it only counts palindromes instead of listing partitions
  • Assuming it just reverses the string
2. Which of the following TypeScript function signatures correctly represents a backtracking function for palindrome partitioning?
easy
A. function backtrack(s: number[], start: string, path: string[], result: string[][]): string
B. function backtrack(s: string, start: number, path: string, result: string[]): boolean
C. function backtrack(s: string, start: number, path: string[], result: string[][]): void
D. function backtrack(s: string[], start: number, path: string[], result: string[][]): number

Solution

  1. Step 1: Analyze parameter types

    The string to partition is 's: string', start index is 'number', path is an array of strings, and result is an array of string arrays.
  2. Step 2: Check return type

    Backtracking functions usually return void because they build results by modifying the result array.
  3. Final Answer:

    function backtrack(s: string, start: number, path: string[], result: string[][]): void -> Option C
  4. Quick Check:

    Correct signature = function backtrack(s: string, start: number, path: string[], result: string[][]): void [OK]
Hint: Backtracking returns void and uses arrays for path and result [OK]
Common Mistakes:
  • Using wrong parameter types like number[] instead of string
  • Returning boolean or number instead of void
  • Passing path as string instead of string[]
3. What will be the output of the following TypeScript code snippet for palindrome partitioning of string "aab"?
function isPalindrome(s: string): boolean {
  return s === s.split('').reverse().join('');
}

function backtrack(s: string, start: number, path: string[], result: string[][]): void {
  if (start === s.length) {
    result.push([...path]);
    return;
  }
  for (let end = start + 1; end <= s.length; end++) {
    const substr = s.substring(start, end);
    if (isPalindrome(substr)) {
      path.push(substr);
      backtrack(s, end, path, result);
      path.pop();
    }
  }
}

const result: string[][] = [];
backtrack("aab", 0, [], result);
console.log(result);
medium
A. [["aa", "ab"]]
B. [["a", "a", "b"], ["aa", "b"]]
C. [["a", "ab"]]
D. [["aab"]]

Solution

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

    "a" and "aa" are palindromes; "b" is a palindrome; "ab" and "aab" are not.
  2. Step 2: Trace backtracking calls

    Partitions found are ["a", "a", "b"] and ["aa", "b"] added to result.
  3. Final Answer:

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

    All palindrome splits of "aab" = [["a", "a", "b"], ["aa", "b"]] [OK]
Hint: Check all palindrome substrings and backtrack all splits [OK]
Common Mistakes:
  • Including non-palindrome substrings like "ab"
  • Missing the "aa" substring partition
  • Returning only one partition instead of all
4. Identify the bug in the following backtracking code for palindrome partitioning and select the fix:
function isPalindrome(s: string): boolean {
  return s === s.split('').reverse().join('');
}

function backtrack(s: string, start: number, path: string[], result: string[][]): void {
  if (start > s.length) {
    result.push([...path]);
    return;
  }
  for (let end = start + 1; end <= s.length; end++) {
    const substr = s.substring(start, end);
    if (isPalindrome(substr)) {
      path.push(substr);
      backtrack(s, end, path, result);
      path.pop();
    }
  }
}
medium
A. Change condition to if (start === s.length) to stop recursion correctly
B. Change substring to slice for correct substring extraction
C. Remove path.pop() to keep all partitions
D. Change for loop to end < s.length to avoid out of bounds

Solution

  1. Step 1: Analyze base case condition

    Condition 'start > s.length' allows start to be s.length + 1, which is invalid index.
  2. Step 2: Correct base case for recursion end

    It should be 'start === s.length' to indicate full string processed and add path to result.
  3. Final Answer:

    Change condition to if (start === s.length) to stop recursion correctly -> Option A
  4. Quick Check:

    Base case must be start === s.length [OK]
Hint: Base case triggers when start equals string length [OK]
Common Mistakes:
  • Using > instead of === in base case
  • Removing path.pop() causing wrong partitions
  • Changing substring method unnecessarily
5. Given the string "racecar", which of the following is NOT a valid palindrome partitioning produced by a backtracking algorithm?
hard
A. ["rac", "ecar"]
B. ["racecar"]
C. ["r", "a", "c", "e", "c", "a", "r"]
D. ["r", "aceca", "r"]

Solution

  1. Step 1: Check palindrome validity of each substring

    "rac" and "ecar" are not palindromes; others are single letters or full palindrome.
  2. Step 2: Confirm valid partitions

    Partitions with only palindrome substrings are valid; those with non-palindromes are invalid.
  3. Final Answer:

    ["rac", "ecar"] -> Option A
  4. Quick Check:

    Non-palindrome substrings invalidate partition [OK]
Hint: Check each substring is palindrome to validate partition [OK]
Common Mistakes:
  • Assuming any split is valid without palindrome check
  • Confusing full string palindrome with partial substrings
  • Ignoring single character substrings as palindromes
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