给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: “aab”
输出:
[
[“aa”,”b”],
[“a”,”a”,”b”]
]
分析:
- 这种题其实都是有固定解法的,显然partition(s)定义为s所能组成的回文字符串列表
- 那么我们依次截取s的前i个字符,判断其是否为回文字符串。若是,则显然 s[:i] + l for l in partition(s[i:]),就为最后的答案
- 例如aab,先判断第一个’a’为回文,则剩余的partition(‘ab’)会返回[[‘a’,’b’]],然后用第一个’a’分别加上返回的值变为[[‘a’,’a’,’b’]]
- 然后判断前两个’aa’为回文,剩余的partition(‘b’)会返回[[‘b’]],加上变为[[‘aa’,’b’]]
思路:
- 定义函数isPalin(s)判断s是否为回文字符串
- 设定递归终止条件
1 | class Solution(object): |