给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 示例 1: 输入:s = "aab" 输出:[["a","a","b"],["aa","b"]] 示例 2: 输入:s = "a" 输出:[["a"]] 提示: 1 <= s.length <= 16 s 仅由小写英文字母组成
解题思路:【递归 + 回溯】
import traceback
class Solution:
def is_palindrome(self, s):
return s[:] == s[::-1]
def split_palindrome(self, s, res, startIndex, path=[]):
# 递归终止条件:分割字符串位置 已经越过字符串最后一位
if startIndex == len(s):
res.append(path[:])
return
# 递归: 将startIndex作为起始的分割字符串的位置,判断分割后部是否为回文串;
# 若是,则继续递归;若不是,则将分割字符串位置向后移动
for i in range(startIndex, len(s)):
if self.is_palindrome(s[startIndex:i + 1]):
path.append(s[startIndex:i + 1])
self.split_palindrome(s, res, i + 1, path)
# 回溯
path.pop()
if __name__ == '__main__':
try:
s = input()
res = []
solution = Solution()
solution.split_palindrome(s, res, 0)
print(res)
except Exception:
traceback.print_exc()
仅作为代码记录,方便自学自查自纠