今天是父亲节
才想起我和老程还没好好拍一张照片
下个星期回家一定要和他单独拍一张
嘿嘿
131-分割回文串
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: "aab"
输出:
[
["aa","b"],
["a","a","b"]
]
思路:
本题我采用的是回溯法思想来解决的,对回溯法思想不清楚的读者可以看看我之前写的一篇文章,相信会对你有所启发。
https://blog.csdn.net/weixin_36431280/article/details/84891567
知道了要用这个算法思想来解决,那代码就比较好写了,具体的步骤流程怎么写我也在这篇文章提到了。关于回文串的定义,相信大家也都清楚,就是一个字符串的顺序和逆序是一样的。
代码如下:
class Solution(object):
# 本题采用回溯法
def partition(self, s):
"""
:type s: str
:rtype: List[List[str]]
"""
# 定义一列表,用来保存最终结果
split_result = []
# 如果给定字符串s为空,则没有分割的必要了
if len(s) == 0:
return split_result
def back(start=0, res=[]):
if start >= len(s):
split_result.append(res)
return
for end in range(start+1, len(s)+1):
split_s = s[start:end]
# 如果当前子串为回文串,则可以继续递归
if split_s == s[start:end][::-1]:
back(end, res+[split_s])
back()
return split_result
if __name__ == "__main__":
s = "aab"
split_result = Solution().partition(s)
print(split_result)
执行效率还算不错,在80%左右。