palindrome-partitioningV1.py (691B)
1 class Solution: 2 def partition(self, s: str) -> List[List[str]]: 3 results = all_parts(s, [], 0) 4 return results 5 6 7 def all_parts(s, current, used): 8 9 if len(s) == used: 10 return [current] 11 12 ret_ls = [] 13 14 for i in range(used, len(s)): 15 if is_palindrome(s, i, used): 16 cp_ls = current.copy() 17 cp_ls.append(s[used : i + 1]) 18 results = all_parts(s, cp_ls, i + 1) 19 for res in results: 20 ret_ls.append(res) 21 22 return ret_ls 23 24 25 def is_palindrome(s, upper, lower): 26 while upper > lower: 27 if s[lower] != s[upper]: 28 return False 29 30 lower += 1 31 upper -= 1 32 return True