# Solving Leetcode Interviews in Seconds with AI: Palindrome Partitioning


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "131" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

	# Problem Statement
	> Given a string s, partition s such that every substring of the partition is a palindrome. Return all possible palindrome partitioning of s.   Example 1: Input: s = "aab" Output: [["a","a","b"],["aa","b"]] Example 2: Input: s = "a" Output: [["a"]]    Constraints:  1 <= s.length <= 16 s contains only lowercase English letters.  

	# Explanation
	Here's the approach, complexity analysis, and Python code for finding all palindrome partitions of a string:

*   **Backtracking:** Explore all possible partitions by recursively trying different substring lengths starting from the beginning of the string.
*   **Palindrome Check:** Efficiently determine if a substring is a palindrome to prune invalid partitions.
*   **Store Results:** Accumulate valid palindrome partitions in a list of lists.

*   **Time Complexity:** O(N * 2<sup>N</sup>), where N is the length of the string. In the worst case, there can be 2<sup>N-1</sup> possible partitions, and checking if each substring is a palindrome takes O(N) time.
    **Space Complexity:** O(N), due to the recursion depth and the space used to store the current partition.

	
	# Code
	```python
	def partition(s: str) -> list[list[str]]:
    """
    Given a string s, partition s such that every substring of the partition is a palindrome.
    Return all possible palindrome partitioning of s.

    Example 1:
    Input: s = "aab"
    Output: [["a","a","b"],["aa","b"]]

    Example 2:
    Input: s = "a"
    Output: [["a"]]

    Constraints:
    1 <= s.length <= 16
    s contains only lowercase English letters.
    """
    result = []

    def is_palindrome(sub):
        return sub == sub[::-1]

    def backtrack(start, current_partition):
        if start >= len(s):
            result.append(current_partition[:])  # Append a copy to avoid modification
            return

        for i in range(start, len(s)):
            sub = s[start:i + 1]
            if is_palindrome(sub):
                current_partition.append(sub)
                backtrack(i + 1, current_partition)
                current_partition.pop()  # Backtrack: remove the last added substring

    backtrack(0, [])
    return result
	```
			
