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 = "aab"
,
Return
[ ["aa","b"], ["a","a","b"] ]
给定一个字符串s,切割s,使得每个子字符串都是回文串,返回所有可能的切割法~先维护一个二维数组isPal,isPal[i][j]代表第i个字符到第j个字符是否是回文串~然后用DFS递归返回所有的切割方式(如果当前的字符串是回文串,就递归处理剩下的字符串)~代码如下
class Solution:
# @param s, a string
# @return a list of lists of string
def partition(self, s):
if s is None or len(s) == 0: return [""]
self.res = []
self.isPal = [[False] * len(s) for i in xrange(len(s))]
for i in xrange(len(s) - 1, -1, -1):
for j in xrange(i, len(s)):
if (j - i <= 1 or self.isPal[i + 1][j - 1]) and s[i] == s[j]:
self.isPal[i][j] = True
self.helper(s, 0, [])
return self.res
def helper(self, s, start, tmp):
if start == len(s):
self.res.append(tmp[:])
return
for i in xrange(start, len(s)):
if self.isPal[start][i]:
tmp.append(s[start: i + 1])
self.helper(s, i + 1, tmp)
tmp.pop()