LeetCode131-分割回文串

今天是父亲节

才想起我和老程还没好好拍一张照片

下个星期回家一定要和他单独拍一张

嘿嘿


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%左右。

猜你喜欢

转载自blog.csdn.net/weixin_36431280/article/details/92383075
今日推荐