Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
For example, given s =
Return
"aab"
,Return
[
["aa","b"],
["a","a","b"]
]
Solution:
We can use dynamic programming to calculate all the possible substrings if they are palindrome or not and save them in a matrix. Then we use backtracking to generate all the possible partitions.class Solution: # @param s, a string # @return a list of lists of string def partition(self, s): isPalindrome = [] for start in range(0, len(s)): isPalindrome.append([]) for length in range(0, len(s)): for start in range(0,len(s)-length): if length==0: isPalindrome[start].append(True) elif length == 1: isPalindrome[start].append(s[start]==s[start+length]) else: isPalindrome[start].append(isPalindrome[start+1][length-2] and s[start]==s[start+length]) solution = [] self.partitionRec(s,0,isPalindrome, [], solution) return solution def partitionRec(self,s,index, isPalindrome, tempSolution, solution): if index==len(s): solution.append(list(tempSolution)) for length in range(0, len(s)-index): if isPalindrome[index][length]: tempSolution.append(s[index:index+length+1]) self.partitionRec(s,index+length+1,isPalindrome, tempSolution, solution) tempSolution.pop()
No comments :
Post a Comment