131. 分割回文串

  1. 题目链接

  2. 解题思路:回溯,尝试每一种可能,process(s, i),划分s[i...],当前的回文子串有哪些情况?单独一个i,或者i, i+1,或者i, i+1, i+2,因此,用一个for循环解决。然后再检查[i, j]是否是回文子串,如果是,则继续递归,划分下一个回文子串process(s, j + 1)

  3. 代码

    class Solution:
    
        # 检查s[i, j]是否是回文串
        def check(self, s: str, i: int, j: int) -> bool:
            while i < j:
                if s[i] != s[j]:
                    return False
                i += 1
                j -= 1
            return True
        
        # 来到index位置,index往后的怎么划分
        def process(self, s: str, index: int, ans: List[List[str]], res: List[str]) -> None:
            if index == len(s):
                ans.append(res[:])
                return
            # 现在划分哪一段?    [index, i]
            for i in range(index, len(s)):
                if self.check(s, index, i):
                    res.append(s[index:i + 1])
                    self.process(s, i + 1, ans, res)
                    res.pop()
            
        def partition(self, s: str) -> List[List[str]]:
            ans = []
            res = []
            self.process(s, 0, ans, res)
            return ans
    
posted @ 2024-12-27 10:30  ouyangxx  阅读(9)  评论(0)    收藏  举报