131. Palindrome Partitioning

131. Palindrome Partitioning

class Solution:
    def partition(self, s: str) -> List[List[str]]:
        res = []

        def isPalindrome(start, end):
            left = start
            right = end
            while left < right:
                if s[left] != s[right]:
                    return False
                left += 1
                right -= 1
            return True

        def backtrack(curr, start):
            if start == len(s):
                res.append(list(curr))
                return

            for i in range(start, len(s)):
                if isPalindrome(start, i):
                    curr.append(s[start:i+1])
                    backtrack(curr, i + 1)
                    curr.pop()
        
        backtrack([], 0)

        return res

類似題目