131. 分割回文串

题目链接

https://leetcode-cn.com/problems/palindrome-partitioning/

“”“与93题 恢复ip地址思路一致”""
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。

返回 s 所有可能的分割方案。

示例:

输入: “aab”
输出:
[
[“aa”,“b”],
[“a”,“a”,“b”]
]

class Solution(object):
    def partition(self, s):
        """
        :type s: str
        :rtype: List[List[str]]
        """
        ans = list()
        if s == '':
            return ans
        tmp = list()
        self.helper(s, tmp, ans)
        return ans

    def helper(self, s, tmp, ans):
        if len(s) == 0:
            ans.append(tmp[:])
            return

        for i in range(len(s)):
            cur = s[:i + 1]
            if self.valid(cur):
                tmp.append(cur)
                self.helper(s[i + 1:], tmp, ans)
                tmp.pop()

    def valid(self, s):
        """
        注意right是闭区间,所以是len(s) - 1
        """
        left, right = 0, len(s) - 1
        # 注意 left == right 的情况下,没有参与到while循环中,但是中间那个元素不影响回文字符串的判别
        while left < right:
            if s[left] != s[right]:
                return False
            left += 1
            right -= 1
        return True

你可能感兴趣的:(leetcode)