解题思路:
这道题是一道图搜索的题目,用到的深度优先搜索方法(dfs)。
首先考虑边界情况:
如果字符串长度为0则应该返回包含一个空列表的列表,即[ [ ] ]。
如果不为空的情况下,从s上遍历检测,如果从开始位置到某位置i的子串是回文串,那我们,将该字符串子串后面的继续用深度优先搜索(dfs2),然后用该子串作为所有dfs2结果中的列表的首元素即可。
也就是说 dfs(s) = s[:i] + dfs(s[i:]),这里要考虑所有可能的i,只要s[:i]是回文就要算进去,就能考虑到所有情况了。只要能把这里想通,那么总体思路就不难了。
具体代码如下:
class Solution:
def partition(self, s: str) -> List[List[str]]:
return self.dfs(s)
def dfs(self, s):
if s == '':
return [[]]
res = []
for i in range(len(s)):
if self.isPal(s[:i+1]):
tmp_set = self.dfs(s[i+1:])
for tmp in tmp_set:
res.append([s[:i+1]] + tmp)
return res
def isPal(self, s):
if s == s[::-1]:
return True
return False
简化代码如下:
class Solution:
def partition(self, s: str) -> List[List[str]]:
if s == '':
return [[]]
res = []
for i in range(len(s)):
if self.isPal(s[:i+1]):
tmp_set = self.partition(s[i+1:])
for tmp in tmp_set:
res.append([s[:i+1]] + tmp)
return res
def isPal(self, s):
if s == s[::-1]:
return True
return False