题目:给你一个字符串 s
,请你将 **s
**分割成一些子串,使每个子串都是 回文串 。返回 s
所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。
示例 1:
输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]
示例 2:
输入:s = "a"
输出:[["a"]]
方法:回溯。
回溯的过程是遍历一个树的过程,分为横向遍历与纵向遍历,在回溯算法中for循环对应横向遍历,递归对应着纵向遍历。这题中,横向遍历中,需要不断尝试在不同的位置切分字符串,
算法思路:
计算计算串总长度 s_l = len(s)
- 横向遍历;start_index为子串(s)的第一个字符索引,横向遍历从左往右不断尝试切分位置,将字符串切分成s1与s2,若s1是回文串,则执行纵向搜索,递归对s2执行横向遍历,否则尝试新的切分位置。(这里如果切下来的s1不是回文串,则已经不满足题目要求,所以无需对s2再做切分,所以直接寻找新的切分位置。)